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());
帮助我们改善文档 (opens new window)
last update: 2022/09/21, 16:00:22