同一级别的LOG4J多个记录器

Mag*_*ezy 3 database logging log4j

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

谢谢

pal*_*int 6

可以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")
}
Run Code Online (Sandbox Code Playgroud)

配置包dbLogger:

<root> 
    <appender-ref ref="mainlog" /> 
</root> 

<logger name="com.mycompany.apackage.MyClass.dblogger">
    <appender-ref ref="dbappender" />
</logger>
Run Code Online (Sandbox Code Playgroud)

(未测试.)在这种情况下,它dbLogger也会记录到mainlogappender.如果它不合适,你可以在mainlog(和其他)appender中使用自定义过滤器来过滤掉消息dbLogger.另一种解决方案是使用完全不同的前缀dbLogger:

    private static final logger = Logger.getLogger(Myclass.class)
    private static final dbLogger = Logger.
        getLogger("dblogger." + Myclass.class.getName())
Run Code Online (Sandbox Code Playgroud)

Log4j配置:

<root> 
</root> 

<logger name="com.mycompany">
    <appender-ref ref="mainlog" />
</logger>
<logger name="dblogger.com.mycompany">
    <appender-ref ref="dbappender" />
</logger>
Run Code Online (Sandbox Code Playgroud)

请注意,如果将相同的参数传递给getLogger()方法,则会获得相同的Logger对象,因此必须使用不同的名称.