我想向源自特定包 - com.example.package 中的类的所有日志添加一个ID。
为了实现这一目标,我使用映射诊断上下文 (MDC) 和 log4j 的布局转换模式。
在代码中,我通过 MDC.put("correlation.id", id); 设置ID;
然后,我创建了一个 log4j.properties 文件,其中包含以下内容:
log4j.rootLogger=WARN,myappender
log4j.appender.myappender=org.apache.log4j.ConsoleAppender
log4j.logger.com.example.package=INFO,myappender
log4j.additivity.com.example.package=false
log4j.appender.myappender.layout=org.apache.log4j.PatternLayout
log4j.appender.myappender.layout.ConversionPattern=<%-4p> %d{yyyy-MMM-dd::HH:mm:ss,SSS} %C{1} %t: - %m - correlation.id=%X{correlation.id}%n
这适用于特定的包。但是,以前在 INFO 级别记录的某些包不再出现。我相信第一行正在将级别设置为全局警告。默认情况下,某些包位于 WARN 上,其他包位于 INFO 上,因此我不想设置全局级别。我尝试删除该行,但如果没有它,我会收到此错误:
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
最后,我不想影响全局日志记录,我真的只想将该转换模式应用于该特定包,并保留其他所有内容,就像创建 log4j.properties 文件之前一样。
这可能吗?
最佳答案
您可以在 log4j 中定义多个附加程序,因此您可以使用如下所示的默认附加程序:
log4j.rootLogger=INFO, myDefaultAppender
对于所有包
以及其他一些包的附加附加程序,如下所示:
log4j.logger.com.example.package1=WARN, myEmailAppender, myFileAppender
log4j.logger.com.example.package2=DEBUG, myFileAppender
关于java - 如何将 log4j conversionPattern 应用于特定包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61731244/