java - 如何将 log4j conversionPattern 应用于特定包?

标签 java logging log4j

我想向源自特定包 - 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/

相关文章:

tomcat - 从 webapp 管理 tomcat 日志记录

java - 我如何在 JDK5 中而不是 JDK6 中为文本添加下划线

java - 并发 JUnit 测试

java - 在java中存储来自传感器的数据的最快方法

java - log4j 层次结构中的内存泄漏

gwt - 在 GWT Web 应用程序中将 log4j.properties 放在哪里

java - 具有作为构造函数参数传递的通用基类的枚举

java - 使用证书 .cer 在 Tomcat 上安装 SSL

ruby-on-rails-3 - 为什么Rails 3.2使用两个记录器ActiveSupport::TaggedLogging和ActiveSupport::BufferedLogger?

java - 将 log4j 语句重定向到 java 中的自定义控制台