我有一个具有log4j日志记录的java项目。它使用滚动文件appender和多个记录器来记录文件。 我想添加一个DBappender并且有一个单独的记录器,它只写入这个appender,其他记录器都没有向它发送消息。我需要,比如说一个类有两个记录器,一个写入fileAppender,另一个写入dbAppender。这是可能的,如果是的话,它的配置是什么?
由于
答案 0 :(得分:6)
可以在一个班级中使用两个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 config:
<root>
</root>
<logger name="com.mycompany">
<appender-ref ref="mainlog" />
</logger>
<logger name="dblogger.com.mycompany">
<appender-ref ref="dbappender" />
</logger>
请注意,如果将相同的参数传递给getLogger()
方法,则会得到相同的Logger
对象,因此您必须使用不同的名称。