如何阻止我的日志文件相互添加?

时间:2013-03-15 14:10:56

标签: java logging log4j

我的代码中每个类都有两个log4j记录器:

logA = Logger.getLogger(com.some.class.in.my.project);
logB = Logger.getLogger('perf');

我希望这两个记录器将数据输出到两个完全不同的文件中。我似乎无法让它发挥作用。

以下是我的log4j属性:

    log4j.rootLogger = myAppenderA


    # A
    log4j.appender.myAppenderA=org.apache.log4j.RollingFileAppender
    log4j.appender.myAppenderA.File=../logs/mylogfileA.log
    log4j.appender.myAppenderA.additivity=false
    log4j.appender.myAppenderA.Threshold=DEBUG
    log4j.appender.myAppenderA.layout=org.apache.log4j.PatternLayout
    log4j.appender.myAppenderA.layout.ConversionPattern=%d{ISO8601} %-5p 0 %m%n


    # perf
    log4j.appender.perf=org.apache.log4j.RollingFileAppender
    log4j.appender.perf.File=..logs/perf.log
    log4j.appender.perf.additivity=false
    log4j.appender.perf.Threshold=DEBUG
    log4j.appender.perf.layout=org.apache.log4j.PatternLayout
    log4j.appender.perf.layout.ConversionPattern=%d{ISO8601} %-5p 0 %m%n

    log4j.logger.myAppenderB = perf 

myLogfileA.log perf.log 都包含相同的数据。据说设置加法可以修正这个问题,但我已经尝试了它并且它几乎没有影响。

1 个答案:

答案 0 :(得分:2)

Additivity是logger的属性,而不是appender,因此您必须从appender中删除additivity属性并将其添加到loggers配置中。

目前,文件中只有rootLogger配置(并且您没有为其定义日志记录级别),因此所有记录器都将从中扩展appender。要停止将消息传播到祖先,您必须使用记录器上的additivity属性。所以要达到你想要的目标:

  1. root定义另一个appender(rootLogger)。它将是默认值,并由没有additivity = false
  2. 的其他记录器继承
  3. myAppenderA appender分配给mypackage.MyClass logger
  4. pref appender分配给pref logger
  5. additivitymyAppenderA记录器的pref设置为false,以阻止日志消息传播到祖先记录器。
  6. 有一个洞属性文件:

    log4j.rootLogger = DEBUG, root
    
    
    # Root
    log4j.appender.root=org.apache.log4j.RollingFileAppender
    log4j.appender.root.File=logs/mainLogInheritable.log
    log4j.appender.root.Threshold=DEBUG
    log4j.appender.root.layout=org.apache.log4j.PatternLayout
    log4j.appender.root.layout.ConversionPattern=%d{ISO8601} %-5p 0 %m%n
    
    
    # A
    log4j.appender.myAppenderA=org.apache.log4j.RollingFileAppender
    log4j.appender.myAppenderA.File=logs/mylogfileA.log
    #log4j.appender.myAppenderA.additivity=false
    log4j.appender.myAppenderA.Threshold=DEBUG
    log4j.appender.myAppenderA.layout=org.apache.log4j.PatternLayout
    log4j.appender.myAppenderA.layout.ConversionPattern=%d{ISO8601} %-5p 0 %m%n
    
    
    # perf
    log4j.appender.perf=org.apache.log4j.RollingFileAppender
    log4j.appender.perf.File=logs/perf.log
    #log4j.appender.perf.additivity=false
    log4j.appender.perf.Threshold=DEBUG
    log4j.appender.perf.layout=org.apache.log4j.PatternLayout
    log4j.appender.perf.layout.ConversionPattern=%d{ISO8601} %-5p 0 %m%n
    
    
     log4j.logger.mypackage.MyClass = DEBUG, myAppenderA
     log4j.logger.perf  = DEBUG, perf
    
     log4j.additivity.perf = false
     log4j.additivity.mypackage.MyClass = false
    

    要测试它是否记录到三个不同的文件,您可以尝试:

    Logger.getLogger("mypackage.MyClass").debug("1111");
    Logger.getLogger("perf").debug("2222");
    Logger.getLogger("anyName").debug("3333");