线程池

但是对于使用了线程池的场景,由于线程池中的线程不会被销毁,会被复用。需要你用TLogInheritableTask替换Runnable,否则标签数据会重复:

ExecutorService pool = Executors.newFixedThreadPool(5);
pool.submit(new TLogInheritableTask() {
@Override
public void runTask() {
log.info("我是异步线程日志");
}
});

这样标签数据就能正确打印了。

除了用以上提供的增强类,这里还推荐一个阿里的ThreadLocal框架,也能完美解决TLog线程池场景的标签传递情况

https://github.com/alibaba/transmittable-thread-local

TLog对这个框架也做了支持,关于如何使用,请去上述地址自行查看。说明和用例已经写的非常清晰了。