同一级别的LOG4J多个记录器

时间:2011-10-05 09:38:58

标签: database logging log4j

我有一个具有log4j日志记录的java项目。它使用滚动文件appender和多个记录器来记录文件。 我想添加一个DBappender并且有一个单独的记录器,它只写入这个appender,其他记录器都没有向它发送消息。我需要,比如说一个类有两个记录器,一个写入fileAppender,另一个写入dbAppender。这是可能的,如果是的话,它的配置是什么?

由于

1 个答案:

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