问题描述
我有一个具有log4j记录的Java项目.它使用滚动文件Appender和多个记录器来记录到文件. 我想添加一个dbappender,并有一个只写给此appender的单独的记录仪,而其他记录仪都没有向其发送消息.我需要,说一个班级有两个登记仪,一堂课写给菲尔森养殖者,另一堂课写给dbappender.是否可以,如果是这样,它的配置是什么?
谢谢
推荐答案
可以在一个类中使用两个Logger.
第一个想法:获取具有不同名称的两个记录器:
package com.mycompany.apackage.MyClass; public class MyClass { private static final logger = Logger.getLogger(Myclass.class) private static final dbLogger = Logger. getLogger(Myclass.class.getName() + ".dblogger") }
dbLogger软件包的配置:
<root> <appender-ref ref="mainlog" /> </root> <logger name="com.mycompany.apackage.MyClass.dblogger"> <appender-ref ref="dbappender" /> </logger>
(未测试.) 在这种情况下,dbLogger也将记录到mainlog appender.如果不合适,您可以使用 mainlog(和其他)附录中的自定义过滤器过滤dbLogger的消息.另一个解决方案是对dbLogger使用完全不同的前缀:
private static final logger = Logger.getLogger(Myclass.class) private static final dbLogger = Logger. getLogger("dblogger." + Myclass.class.getName())
log4j配置:
<root> </root> <logger name="com.mycompany"> <appender-ref ref="mainlog" /> </logger> <logger name="dblogger.com.mycompany"> <appender-ref ref="dbappender" /> </logger>
请注意,如果将相同的参数传递给getLogger()方法,则会获得相同的Logger对象,因此您必须使用不同的名称.
问题描述
I have a java project that has a log4j logging. It uses a rolling file appender and multiple loggers to log to a file. I want to add a DBappender and have a seperate logger that only writes to this appender, with none of the other loggers sending messages to it. I need, say one class to have two loggers, one writing to the fileAppender and one writing to the dbAppender. Is this possible, if so what is the configuration for it?
Thanks
推荐答案
It's possible to use two Loggers in one class.
First idea: get the two loggers with different names:
package com.mycompany.apackage.MyClass; public class MyClass { private static final logger = Logger.getLogger(Myclass.class) private static final dbLogger = Logger. getLogger(Myclass.class.getName() + ".dblogger") }
Config for the package of the dbLogger:
<root> <appender-ref ref="mainlog" /> </root> <logger name="com.mycompany.apackage.MyClass.dblogger"> <appender-ref ref="dbappender" /> </logger>
(Not tested.) In that case the dbLogger also logs to the mainlog appender. If it's not appropriate you could use a custom filter in the mainlog (and other) appenders which filters out the messages of the dbLogger. Another solution is using a completely different prefix for the dbLogger:
private static final logger = Logger.getLogger(Myclass.class) private static final dbLogger = Logger. getLogger("dblogger." + Myclass.class.getName())
Log4j config:
<root> </root> <logger name="com.mycompany"> <appender-ref ref="mainlog" /> </logger> <logger name="dblogger.com.mycompany"> <appender-ref ref="dbappender" /> </logger>
Note that if you pass the same parameter to the getLogger() method you will get same Logger object, so you have to use different names.