我有一个带有多个"模块的Java程序"每个都有自己的线程集。我希望能够从特定模块grep日志,所以我希望每个模块日志以" [moduleId]"开始。
我尝试过使用log4j和以下配置:
log4j.rootLogger=i, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout.ConversionPattern=[%X{moduleId}] %d{yyyy-MM-dd HH:mm:ss} %5p %c{1}:%L %t - %m%n
并使用
MDC.put("moduleId", "module1");
在每个模块线程中。
这工作正常,但我有代码负责管理模块,我很难使用MDC.put()和那些线程日志开始于 []因为MDC变量" moduleId"没有定义。
是否可以使用log4j(或其他java记录器)为" moduleId"指定默认值。变量?
这样代码
logger.info("1");
MDC.put("moduleId", "module1");
logger.info("2");
日志
[system] ... 1
[module1] ... 2
而不是
[] ... 1
[module1] ... 2
还有一种方法,多行日志(例如堆栈跟踪)的所有行都以[moduleId]开头,而不仅仅是第一行吗?