我想在我的应用程序中使用两个不同的log4j记录器,并且在它们写入其尊重日志的内容之间没有“重叠”。

例如:

  • Logger1写入与一组系统事件
  • 相关的INFO事件
  • Logger2写入与另一组系统事件
  • 相关的INFO事件
  • 两次不应在日志中显示任何条目

  • 我的log4j.properties如下:
    log4j.rootLogger=DEBUG, stdout
    log4j.logger.org.apache=DEBUG, stdout
    log4j.logger.xdasLogger=DEBUG, xdas
    
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%m%n
    
    log4j.appender.xdas=org.apache.log4j.ConsoleAppender
    log4j.appender.xdas.layout=org.apache.log4j.PatternLayout
    log4j.appender.xdas.layout.ConversionPattern=%d %-5p %c - %m%n
    

    我的Java代码如下:
    public static void main(String[] args) {
        PropertyConfigurator.configure(Client.class
                .getResource("/log4j.properties"));
        xdasLogger = Logger.getLogger("xdasLogger");
        logger = Logger.getLogger(Client.class);
    
        logger.info("normal");
        xdasLogger.info("xdas");
    }
    

    但是我的控制台输出如下:
    normal
    2012-06-28 09:52:44,580 INFO  xdasLogger - xdas
    xdas
    

    请注意,loggerxdasLogger都记录了“xdas”,这是不希望的。

    有谁知道我需要对log4j.properties进行哪些更改才能将控制台输出更改为以下内容?
    normal
    2012-06-28 09:52:44,580 INFO  xdasLogger - xdas
    

    解决方案(来自接受的答案):
    log4j.rootLogger=DEBUG, stdout
    log4j.logger.org.apache=DEBUG, stdout
    log4j.logger.xdasLogger=DEBUG, xdas
    
    log4j.additivity.org.apache=false
    log4j.additivity.xdasLogger=false
    
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%m%n
    
    log4j.appender.xdas=org.apache.log4j.ConsoleAppender
    log4j.appender.xdas.layout=org.apache.log4j.PatternLayout
    log4j.appender.xdas.layout.ConversionPattern=%d %-5p %c - %m%n
    

    最佳答案

    尝试将记录器的可加性设置为false。这将避免传播到rootLogger。

    log4j.additivity.org.apache=false
    log4j.additivity.xdasLogger=false
    

    07-24 15:17
    查看更多