log4j.properties 文件 - 同一类中的多个记录器

2022-09-01 00:38:01

我希望在我的应用程序中有两个不同的记录器,并且他们写入其尊重日志的内容之间没有“重叠”。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

请注意,“xdas” 由 和 同时记录,这是不希望的。loggerxdasLogger

有谁知道我需要对 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

答案 1

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

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

答案 2

推荐