问题背景
1.当我们的程序开启了多个线程进行作业的时候,如何把跟一个作业相关的日志都打印到一个文件呢,而不是都打印在一个文件里,毕竟都打印在一个文件里,很不方便我们日常去查看问题。
2.经过调研发现slfj的MDC就可以实现这个功能,原理就是通过threalocal去实现的,感兴趣的可以去查看源码。
解决方法
1.具体怎么使用也很简单,我们需要在datax的线程池执行任务的时候,能够获取到启动这个线程池传递过来的jobId就可以了,具体代码如下。
1 | package com.alibaba.datax.core.util; |
1 | package com.alibaba.datax.core.util; |
通过上述对线程池进行改造,在线程池每次获取任务的时候,都可以从父线程获取父线程设置的变量。因此我们要在父线程启动子线程的时候,设置上这个变量。
1 | MDC.put("jobId", String.valueOf(jobId)); |
接下来,我们需要配置下logback.xml
1 |
|