我正在开发一个项目,该项目使用forkjoinpool进行多线程,使用log4j进行日志记录。在我们的项目中,有多个工作岗位。并发运行,每个作业只由一个线程处理。
日志记录的问题在作业的主要流程中,我们可以将作业ID添加到记录器前面,以便相应的日志条目具有作业ID信息。但是,在处理每个作业时,会调用许多实用程序API,并且来自此类API的日志记录条目不具有作业信息。 log4j确实打印了线程ID,以便区分不同作业的日志,但我想知道将作业ID添加到实用程序API日志的最简单/最好的方法是什么?
我有两个想法,我不确定我是否朝着正确的方向前进,
请指教,谢谢。
答案 0 :(得分:1)
对于类似的内容,mapped diagnostic context是跟踪您的工作ID的好方法。您可以在每个线程的基础上设置它(并在finally
子句中将其删除),并且您可以像模式布局中的线程名称一样引用它。
@Override
protected void compute() {
MDC.put("job-id", jobId);
try {
/* Do your task */
} finally {
MDC.remove("job-id");
}
}