使用org.slf4j.MDC和Netty频道?

时间:2015-02-23 07:12:05

标签: java logging netty slf4j logback

我想要做的实质上是How to use MDC with thread pools?所要求的,但是使用Netty。

我想要根据Channel关联的MDC信息。 Netty有哪些选择?如果我需要手动重置MDC,我可以从一个地方连接哪些方法?

1 个答案:

答案 0 :(得分:0)

在GitHub上查看mdedetrich/mdc-async-netty-eventloopgroup项目。基本上,你必须装饰EventLoopGroup.execute

@Override
public void execute(Runnable runnable) {
    delegate.execute(new Runnable() {
        @Override
        public void run() {
            Map<String, String> oldMdcContext = MDC.getCopyOfContextMap();
            setContextMap(mdcContext);
            try {
                runnable.run();
            } finally {
                setContextMap(oldMdcContext);
            }

        }
    });
}

private void setContextMap(Map<String, String> context) {
    if (context == null) {
        MDC.clear();
    } else {
        MDC.setContextMap(context);
    }
}