【问题标题】:log4j.properties file - multiple loggers in same classlog4j.properties 文件 - 同一类中的多个记录器
【发布时间】:2012-06-28 08:02:06
【问题描述】:

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

例如:

  • Lo​​gger1 写入与一组系统事件相关的 INFO 事件
  • Lo​​gger2 写入与另一组系统事件相关的 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

【问题讨论】:

    标签: java logging log4j


    【解决方案1】:

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

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

    【讨论】:

    • 您的解决方案似乎绝对正确,但对我不起作用。我将这些行添加到/etc/spark/conf/log4j.properties,这不正确吗?我是否需要重新启动 Spark(或重置其他任何内容)才能获取更新的属性?
    • 您是否使用了已在 Spark 的 log4j.properties 中配置的记录器名称?或者 Spark 使用 log4j2,它有一个不同的属性文件 - log4j2.properties?如果您可以提供更多详细信息,我可以尝试提供帮助
    • @kjp 据我所知,Spark 2.3.0(2018 年 2 月 28 日发布)仍然使用 log4j,如告知 here。此外,“已经在 log4j.properties for Spark 中配置的记录器名称”是什么意思??在log4j.properties 文件中,我看到类似log4j.rootCategory=WARN,consolelog4j.appender.console=org.apache.log4j.ConsoleAppender 的行
    • 你能给一个完整的 log4j 配置的链接吗?
    • @kjp here 是我的/etc/spark/conf.dist/log4j.properties 文件的链接。虽然我已经降级到Spark 2.2.1(还在EMR 5.12.0),但这似乎对这个问题没有任何影响。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-09
    • 2021-06-18
    • 1970-01-01
    • 2015-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多