multithreading - MDC 上下文仅被复制到 ForkJoinPool 的一个线程
问题描述
我想将 MDC 上下文传递给 ForkJoinPool 的线程,因为我需要在所有生成的线程日志中打印填充在 MDCContextMap 中的 requestId 以便更好地调试。我为此使用以下解决方案:如何将 MDC 与 ForkJoinPool 一起使用?.
我将游泳池用作:
final ForkJoinPool mdcPool = new MdcForkJoinPool(30);
mdcPool.submit(() -> ruleset.getOperationList().parallelStream().forEach(operation -> {
log.info("Sample log line");
但从日志看来,MDC 上下文仅被复制到池的一个线程中。我还在 MdcForkJoinPool 的 submit 方法和 beforeExecution 方法中放置了一些日志。以下是 requestID 仅在一个线程(“ForkJoinPool-1-worker-25”)日志中打印的日志:
16 Oct 2018 15:05:32,570 [INFO] eb73e823-d154-11e8-871a-d138501061d6 (Coral Endpoint : 1) com.amazon.service.utils.MdcForkJoinPool: submit: Runnable
16 Oct 2018 15:05:32,571 [INFO] (ForkJoinPool-1-worker-25) com.amazon.service.utils.MdcForkJoinPool: Before Execution: {RequestId=eb73e823-d154-11e8-871a-d138501061d6}
16 Oct 2018 15:05:32,571 [INFO] (ForkJoinPool-1-worker-25) com.amazon.service.utils.MdcForkJoinPool: Before Execution: {}
16 Oct 2018 15:05:32,571 [INFO] (ForkJoinPool-1-worker-25) com.amazon.service.utils.MdcForkJoinPool: Setting mDC: {}
16 Oct 2018 15:05:32,574 [INFO] (ForkJoinPool-1-worker-4) com.amazon.service.activity.business.VariablesEvaluator: Sample log line
16 Oct 2018 15:05:32,574 [INFO] (ForkJoinPool-1-worker-29) com.amazon.service.activity.business.VariablesEvaluator: Sample log line
16 Oct 2018 15:05:32,575 [INFO] eb73e823-d154-11e8-871a-d138501061d6 (ForkJoinPool-1-worker-25) com.amazon.service.activity.business.VariablesEvaluator: Sample log line
16 Oct 2018 15:05:32,576 [INFO] (ForkJoinPool-1-worker-22) com.amazon.service.activity.business.VariablesEvaluator: Sample log line
16 Oct 2018 15:05:32,576 [INFO] (ForkJoinPool-1-worker-4) com.amazon.service.activity.business.VariablesEvaluator: some Other logs
16 Oct 2018 15:05:32,576 [INFO] eb73e823-d154-11e8-871a-d138501061d6 (ForkJoinPool-1-worker-25) com.amazon.service.activity.business.VariablesEvaluator: some Other logs
我没有以正确的方式使用自定义 ForkJoinPool 吗?
解决方案
推荐阅读
- c# - 如何有一个动作来支持表单数据和正文中的 JSON?
- javascript - 带有存储的对象内的数组
- pytorch - 如何在 PyTorch 中与另一个数据加载器一起采样
- angular - 角度合并/加入/组合两个订阅
- ada - Ada on the microbit:滚动文本示例不起作用,找不到 libusb 库
- python - 如果 str.contains() 条件在数据框的内容上;AttributeError:“str”对象没有属性“str”
- laravel - 如何在引导程序的选项标签中显示 fa-icon
- php - 如何将字符串值从 livewire 前端绑定到属性转换为整数?
- java - 将 admob 广告放在底部时,透明警报对话框活动不会像对话框一样?
- ruby - 是否可以从我的 yml 文件中使用 gem faker?