如何进行logback MDC继承到struts2动作的子线程?

时间:2017-11-23 09:42:29

标签: java logback mdc

我的项目使用struts2.5.13 + spring5.0.1 + logback1.2.3。

使用新版本的logback,子线程不再从主线程继承MDC值,因此struts2操作中的错误日志无法获取MDC值。

基本问题可能包括以下问题:

我已经阅读了他们的解决方案,但仍然无法理解如何解决我的问题。

如下例所示,我可以通过MDC.getCopyOfContextMap()获取MDC,并在execute方法中设置它。 但这只适用于我指定的动作和方法。

public class TestAction extends ActionSupport {
    private Logger log=LoggerFactory.getLogger(PatchAction.class);
    private Map<String,String> contextMap = MDC.getCopyOfContextMap();

    public String testMethod1(){
        MDC.setContextMap(contextMap);
        log.info("test1");
        return "main";
    }

    public String testMethod2(){
        log.info("test2");
        return "main";
    }
}

在此示例中,只有method1生成的日志获取MDC值。 方法2或其他操作生成的日志中的MDC值将为null。

我想要一个明确的解决方案来处理所有操作中的所有方法。

How to use MDC with thread pools?展示了如何使其成为现实,但我不知道如何与struts2集成。

我想知道如何包装struts2的动作执行器。

0 个答案:

没有答案