【问题标题】:Spring Batch MDC LoggingSpring Batch MDC 日志记录
【发布时间】:2019-01-31 05:00:54
【问题描述】:

我想知道如何在 Spring Batch 中使用 MCD 记录 Job NameExecution ID 等内容。

这里有一些代码:

bootstrap.properties

这个文件有一个我当前记录的项目列表,我在这里添加了execId 作为第三个元素。

logging.pattern.level=%5p [%X{X-B3-TraceId:-},%X{sessionId:-},%X{execId:-},%X{program:-},%X{mainframeId:-}]
spring.application.name=mcc
spring.profiles.active=globals,local,local-override

MCC 应用程序

这个文件有我的主要方法。当我使用MDC.put("execId", "12345"); 在此处手动设置字段时,我在日志中看到它,但我不明白如何将我需要的实际信息放在这里。

@SpringBootApplication(exclude = {SecurityAutoConfiguration.class, ManagementWebSecurityAutoConfiguration.class})
public class MccApplication {

    public static void main(String[] args) {
        MDC.put("execId", "12345");
        SpringApplication.run(MccApplication.class, args);
    }

}

如果有任何见解,我将不胜感激 :) 谢谢。

【问题讨论】:

    标签: spring spring-boot spring-batch logback mdc


    【解决方案1】:

    免责声明:我不熟悉spring-batch

    MDC 将帮助您记录作业名称和执行 ID 以及日志语句,因为 MDC 具有线程关联性。因此,如果您在线程中将某些内容放入 MDC,那么在该线程的整个生命周期中,您(和 logback)都可以使用它。所以如果你把 MDC.put("execId", "12345"); 放在你的 main 方法中,那只会在主线程中可用。

    作业名称和执行 ID 仅在 Spring Batch 可能产生的任何子线程中才有意义(我在这里基于疯狂的假设运行,因为我不熟悉 Spring Batch)。所以在你的实际 Job 的开头添加MDC.put("execId", "12345");,而不是在 main() 方法中。

    【讨论】:

    • 感谢您的回复和建议,我会尝试您的建议并在此处回复我的结果
    • 一些有趣的阅读在这里:shengwangi.blogspot.com/2015/09/…
    • 感谢您的链接和输入。我对现在该做什么有了更清晰的想法。
    • @Josh 乐于助人