log4j:如何指定指定默认MDC值?

use*_*570 5 java log4j

我有一个带有多个“模块”的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
Run Code Online (Sandbox Code Playgroud)

并使用

MDC.put("moduleId", "module1");
Run Code Online (Sandbox Code Playgroud)

在每个模块线程中。

这工作正常,但我有负责管理模块的代码,我很难使用 MDC.put() 并且这些线程日志以 [] 开头,因为 MDC 变量“moduleId”未定义。

是否可以使用 log4j (或其他 java 记录器)为“moduleId”变量指定默认值?

这样代码

logger.info("1");
MDC.put("moduleId", "module1");
logger.info("2");
Run Code Online (Sandbox Code Playgroud)

日志

[system] ... 1
[module1] ... 2
Run Code Online (Sandbox Code Playgroud)

代替

[] ... 1
[module1] ... 2 
Run Code Online (Sandbox Code Playgroud)

还有一种方法可以让多行日志(例如堆栈跟踪)的所有行都以 [moduleId] 开头,而不仅仅是第一行?