我有一个Java项目有一个log4j日志记录。它使用一个滚动文件追加器和多个记录器来记录一个文件。
我想添加一个dbappender,并有一个单独的记录器,它只写入这个appender,而没有其他的记录器向它发送消息。我需要,假设一个类有两个记录器,一个写入fileappender,一个写入dbappender。这可能吗?如果可能的话,它的配置是什么?
谢谢
最佳答案
可以在一个类中使用两个Logger
s。
第一个想法:让两个名字不同的伐木工人:
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
附加程序。如果不合适你可以用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
对象,因此必须使用不同的名称。