我正在使用MDC Logger,它对我非常有效,除了一个问题。无论在代码中的哪个位置我们使用了CompletableFuture,在创建的线程中,MDC数据都没有传递到下一个线程,导致日志失败。例如,在代码中,我使用了下面的片段来创建新线程。
最初的回答:
在使用CompletableFuture时,MDC数据不能正确地传递到下一个线程,导致日志失败。以下是我用于创建新线程的代码片段:
CompletableFuture.runAsync(() -> getAcountDetails(user));
最初的回答如下:
日志结果如下
2019-04-29 11:44:13,690 INFO | /app/rest/controller/userdetails | f80fdc1f-8123-3932-a405-dda2dc2a80d5 |[http-nio-8182-exec-5] RestServiceExecutor: service:
2019-04-29 11:44:13,690 INFO | /app/rest/controller/userdetails | f80fdc1f-8123-3932-a405-dda2dc2a80d5 |[http-nio-8182-exec-5] RestServiceExecutor:
2019-04-29 11:44:13,779 INFO | /app/rest/controller/userdetails | f80fdc1f-8123-3932-a405-dda2dc2a80d5 |[http-nio-8182-exec-5] UserDetailsRepoImpl:
2019-04-29 11:44:13,950 INFO [ForkJoinPool.commonPool-worker-3] RestServiceExecutor: header:
2019-04-29 11:44:13,950 INFO [ForkJoinPool.commonPool-worker-3] RestServiceExecutor: service:
2019-04-29 11:44:14,012 INFO [ForkJoinPool.commonPool-worker-3] CommonMasterDataServiceImpl: Cache: Retrieving Config Data details.
2019-04-29 11:44:14,028 INFO [ForkJoinPool.commonPool-worker-3] CommonMasterDataServiceImpl: Cache: Retrieved Config Data details : 1
2019-04-29 11:44:14,028 INFO [ForkJoinPool.commonPool-worker-3] CommonMasterDataServiceImpl: Cache: Retrieving Config Data details.
2019-04-29 11:44:14,033 INFO [ForkJoinPool.commonPool-worker-3] CommonMasterDataServiceImpl: Cache: Retrieved Config Data details : 1
2019-04-29 11:44:14,147 INFO | /app/rest/controller/userdetails | f80fdc1f-8123-3932-a405-dda2dc2a80d5 |[http-nio-8182-exec-5] SecondaryCacheServiceImpl: Fetching from secondary cache
2019-04-29 11:44:14,715 INFO | /app/rest/controller/userdetails | f80fdc1f-8123-3932-a405-dda2dc2a80d5 |[http-nio-8182-exec-5] CommonMasterDataServiceImpl: Cache: Retrieving Config Data details.
2019-04-29 11:44:14,749 INFO | /app/rest/controller/userdetails | f80fdc1f-8123-3932-a405-dda2dc2a80d5 |[http-nio-8182-exec-5]
以下是我的MDC数据,但在线程[ForkJoinPool.commonPool-worker-3]
中无法传递。
最初的回答:
下面是我的MDC数据,但它无法与线程一起传递。
| /app/rest/controller/userdetails | f80fdc1f-8123-3932-a405-dda2dc2a80d5 |
以下是我的logback.xml配置,其中sessionID是MDC数据。将MDC添加到日志记录中可以轻松地跟踪特定会话的日志信息。
<configuration scan="true">
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<charset>utf-8</charset>
<Pattern>%d %-5level %X{sessionID} [%thread] %logger{0}: %msg%n</Pattern>
</encoder>
</appender>
</configuration>
最初的回答:我尝试了下面的链接。这对于TaskExecutor非常有效,但我没有找到任何适用于CompletableFuture的解决方案。
我尝试了下面的链接http://shengwangi.blogspot.com/2015/09/using-log-mdc-in-multi-thread-helloworld-example.html?_sm_au_=iVVrZDSwwf0vP6MR。这个链接非常适用于TaskExecutor。但是,我尚未找到适用于CompletableFuture的解决方案。