MDC模式中的异步线程

如果你用了标签位置自定义功能(这个功能是用slf4j的MDC来实现的),那么你有可能发现,在MDC模式中的异步线程好像都没法正常打印标签。这是因为MDC中使用了ThreadLocal,而ThreadLocal中的信息没法传递给子线程。为此TLog提供了线程的包装类,能帮助你解决这个问题。

还是同样的类TLogInheritableTask,如果你声明一个线程,你需要去继承TLogInheritableTask

public class AsynDomain extends TLogInheritableTask {
private Logger log = LoggerFactory.getLogger(this.getClass());
@Override
public void runTask() {
log.info("这是异步方法哦");
log.info("异步方法开始");
log.info("异步方法结束");
}
}

执行的时候和普通继承了Thread一样:

new AsynDomain().start();

如果你要在线程池中执行,同样以AsynDomain为例,则为:

ExecutorService pool = Executors.newFixedThreadPool(5);
pool.submit(new AsynDomain());