繁体   English   中英

log4j2 线程上下文的配置

[英]Configuration of log4j2 Thread Context

在我的 Spring Boot 应用程序中,我使用的是 log4j2。 这是一个典型的 Web 应用程序。 我有很多连接,我想为每个连接分开日志。

我想使用线程上下文

@RequestMapping(value = "/test", method = RequestMethod.GET)
public String test() throws InterruptedException
{
    try (final CloseableThreadContext.Instance ctc = CloseableThreadContext.push(UUID.randomUUID().toString()))
    {

        logger.info("start");
        Thread.sleep(1000);
        logger.info("end.");
    }
    return "response";
}

我正在两个终端中进行测试: curl localhost:8000/test 但我有结果:

14:09:27.895 [qtp401792389-21] INFO  Controllers.ContentController - start
14:09:28.062 [qtp401792389-19] INFO  Controllers.ContentController - start
14:09:28.896 [qtp401792389-21] INFO  Controllers.ContentController - end.
14:09:29.062 [qtp401792389-19] INFO  Controllers.ContentController - end.

这是会议的混合,我想要这个:

14:09:27.895 [qtp401792389-21] INFO  Controllers.ContentController - start
14:09:28.896 [qtp401792389-21] INFO  Controllers.ContentController - end.
14:09:28.062 [qtp401792389-19] INFO  Controllers.ContentController - start
14:09:29.062 [qtp401792389-19] INFO  Controllers.ContentController - end.

那么,有没有什么特别的配置呢?

Log4j2 FAQ 有一个示例,说明如何使用RoutingAppender根据 ThreadContext 键将日志路由到不同的文件。

这使用 ThreadContext 映射,而不是堆栈(因此您需要使用put方法而不是push )。

有点晚了,但如果您将 MDC 实现与ThreadContext.put(key, value)一起使用会更好。 使用正确的配置(如{%20X}.很重要{%20X}.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM