gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 04:27:48 25 4
gpt4 key购买 nike

我的代码中的每个类都有两个 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.logperf.log 都包含相同的数据。据说将可加性设置为 false 可以修复此问题,但我已经尝试过,但影响不大。

最佳答案

可加性是记录器的属性,而不是附加器的属性,因此您必须删除 additivity来自appender的属性并将其添加到您的记录器配置中。

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

  1. root 再定义一个附加程序 ( rootLogger ) 。它将成为默认记录器,并由其他没有 additivity = false 的记录器继承。
  2. 分配myAppenderA附加到mypackage.MyClass记录器
  3. 分配pref附加到pref记录器
  4. 设置additivitymyAppenderApref记录器至false停止向祖先记录器传播日志消息。

有孔属性文件:

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");

关于java - 如何阻止我的日志文件相互添加?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15434573/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com