2011-10-05 69 views
3

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

感谢

回答

5

有可能在一个类中使用两个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对象,所以你必须使用不同的名称。

相关问题