我有一个多线程应用程序,其中每个线程使用名称分别为不同的对象进行操作:
process-1
process-2
process-3
当前模式如下:
[%thread] - %msg %n
我想实现这样的目标:
[%thread] %processName - %msg %n
在对象中指定processName
的位置。
我的目标是将这些名称添加到生成的日志中,因此当我需要查看历史记录时,我将能够非常轻松地grep它们。我已经在记录线程名称,但这对我来说还不够。
我已经开始使用MDC,但是事实证明,它保留了所有线程之间的存储名称。在最佳情况下,它将对所有日志使用该名称,最糟糕的是,该属性为空。
无论有无MDC,如何实现这种线程安全的日志记录?
答案 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保存在线程中,因此每个线程将具有不同的值