3
我有一个具有log4j日志记录的java项目。它使用滚动文件appender和多个记录器来登录到文件。 我想添加一个DBappender并有一个独立的记录器,只写入这个appender,没有其他记录器发送消息给它。我需要说一个类有两个记录器,一个写入fileAppender,一个写入dbAppender。这是可能的,如果是这样的话,它的配置是什么?LOG4J同一类中的多个记录器
感谢
我有一个具有log4j日志记录的java项目。它使用滚动文件appender和多个记录器来登录到文件。 我想添加一个DBappender并有一个独立的记录器,只写入这个appender,没有其他记录器发送消息给它。我需要说一个类有两个记录器,一个写入fileAppender,一个写入dbAppender。这是可能的,如果是这样的话,它的配置是什么?LOG4J同一类中的多个记录器
感谢
有可能在一个类中使用两个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
(和其他)appender中使用 自定义筛选器,筛选出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
对象,所以你必须使用不同的名称。