多线程系统中的Logback和MDC

时间:2019-01-11 15:06:17

标签: java logging logback mdc

我有一个多线程应用程序,其中每个线程使用名称分别为不同的对象进行操作:

process-1
process-2
process-3

当前模式如下:

[%thread] - %msg %n

我想实现这样的目标:

[%thread] %processName - %msg %n

在对象中指定processName的位置。

我的目标是将这些名称添加到生成的日志中,因此当我需要查看历史记录时,我将能够非常轻松地grep它们。我已经在记录线程名称,但这对我来说还不够。

我已经开始使用MDC,但是事实证明,它保留了所有线程之间的存储名称。在最佳情况下,它将对所有日志使用该名称,最糟糕的是,该属性为空。

无论有无MDC,如何实现这种线程安全的日志记录?

1 个答案:

答案 0 :(得分:0)

我想每个进程都在不同的线程中运行 因此,当启动放置在MDC中的线程时,id进程

// this method runs in different thread for each invocation.
public void startProcess(String idProcess) {
    MDC.put("processName", idProcess);
     ....

并在您的登录名中更改模式

[%thread] %X{processName} %msg %n

put方法将id保存在线程中,因此每个线程将具有不同的值