【问题标题】:LOG4J Multiple Loggers in same classLOG4J 同一类中的多个记录器
【发布时间】:2011-10-05 09:38:58
【问题描述】:

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

谢谢

【问题讨论】:

    标签: database logging log4j


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2012-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-14
      相关资源
      最近更新 更多