我有一个Java项目有一个log4j日志记录。它使用一个滚动文件追加器和多个记录器来记录一个文件。
我想添加一个dbappender,并有一个单独的记录器,它只写入这个appender,而没有其他的记录器向它发送消息。我需要,假设一个类有两个记录器,一个写入fileappender,一个写入dbappender。这可能吗?如果可能的话,它的配置是什么?
谢谢

最佳答案

可以在一个类中使用两个Loggers。
第一个想法:让两个名字不同的伐木工人:

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对象,因此必须使用不同的名称。

09-25 20:16