我使用UUID绑定Java中的某些执行,以便我可以在Splunk日志中继续跟踪它。
无论出于什么原因,它都是空的,这是我的代码:
try {
String taskId = UUID.randomUUID().toString();
MDC.put("request_id", taskId);
MDC.put("auth_user", "myservice");
** some logic here **
} finally {
MDC.clear();
}
在Splunk中,我看到了:
2018-02-02T00:00:05.905+0000 request_id= user=myservice level=INFO ...
request_id
是空的?这是为什么?
代码被部署到多个盒子,我设置了cron作业,每天凌晨3点运行它。为了避免多个实例运行相同的代码,我使用ShedLock锁定代码,这保证只有一个框可以运行代码,到完成时,它通过了cron作业中安排的时间,我确保代码是每天只有一个盒子执行一次。
更新: 原来logback.xml中的设置是错误的,这里是之前的:
<property name="APPLICATION_PATTERN"
value="%date{"yyyy-MM-dd'T'HH:mm:ss.SSSZ", UTC} request_id=%mdc{requestId} user=%mdc{auth_user} level=%-5level logger=%logger %msg%n"/>
预计mdc {requestId}不是mdc {request_id}