Log4j2 ThreadContext 映射不适用于parallelStream()

2024-05-15

我有以下示例代码:

public class Test {
    static {
        System.setProperty("isThreadContextMapInheritable", "true");
    }

    private static final Logger LOGGER = LogManager.getLogger(Test.class);

    public static void main(String[] args) {
        ThreadContext.put("UUID", UUID.randomUUID().toString());
        LOGGER.info("in main method start");
        new Test().run();
        LOGGER.info("in main method end");    
    }

    private void run() {
        Collections.nCopies(10, 1)
                .parallelStream()
                .forEach(i->LOGGER.info("Inside thread"));    
    }
}

Log4j2 模式如下:

<pattern>%X{UUID} [%t] %msg %n</pattern>

运行上面的结果:

2cf774ff-03c8-483e-9828-451b61349221 [main] in main method start 
2cf774ff-03c8-483e-9828-451b61349221 [main] Inside thread 
2cf774ff-03c8-483e-9828-451b61349221 [main] Inside thread 
2cf774ff-03c8-483e-9828-451b61349221 [main] Inside thread 
2cf774ff-03c8-483e-9828-451b61349221 [main] Inside thread 
2cf774ff-03c8-483e-9828-451b61349221 [main] Inside thread 
2cf774ff-03c8-483e-9828-451b61349221 [ForkJoinPool.commonPool-worker-3] Inside thread 
2cf774ff-03c8-483e-9828-451b61349221 [ForkJoinPool.commonPool-worker-1] Inside thread 
 [ForkJoinPool.commonPool-worker-1] Inside thread 
 [ForkJoinPool.commonPool-worker-1] Inside thread 
 [ForkJoinPool.commonPool-worker-3] Inside thread 
2cf774ff-03c8-483e-9828-451b61349221 [main] in main method end 

正如你所看到的,第一次[ForkJoinPool.commonPool-worker-1] and [ForkJoinPool.commonPool-worker-3]线程UUID变量已记录,但其他时间未记录。

为什么 Log4j2 会跳过ThreadContext某些线程的变量以及如何解决这个问题?

谢谢你的帮助!


我知道这是一篇旧帖子
但我在同样的问题上苦苦挣扎,花了几天时间才找到可行的解决方案。
这是answer https://stackoverflow.com/a/19329668/11825162,创建自定义ThreadPoolExecutor确实解决了我的问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Log4j2 ThreadContext 映射不适用于parallelStream() 的相关文章

随机推荐

  • 不可见的 reCAPTCHA - 缺少必需的参数:sitekey

    我正在为每个带有具有类的按钮的表单动态加载不可见的 reCAPTCHAg recaptcha 我遇到的问题是验证码未正确加载 我不知道为什么 我按照验证码网站上的文档进行操作 但我不确定如何以及为什么会出现此错误 Uncaught Erro
  • DocuSign 创建一个长期存在的嵌入式签名 URL?

    嵌入式签名 url API 方法返回的 URL信封视图 createRecipient https developers docusign com docs esign rest api reference Envelopes Envelo
  • Java 正则表达式中的逻辑 AND

    是否可以在 Java Regex 中实现逻辑 AND 如果答案是肯定的 那么如何实现呢 正则表达式中的逻辑 AND 由一系列堆叠的先行断言组成 例如 foo bar glarch 将匹配包含所有三个 foo bar 和 glarch 的任何
  • 这两种方式哪一种是惯用的方式? time.Sleep() 还是自动收报机?

    我必须每分钟执行一些语句 我不确定我应该遵循以下哪一项 如果有人能解释内存和 CPU 方面的优缺点 那就太好了 时间 Sleep func main go func for time Sleep time Minute fmt Printl
  • Google Cloud Messaging 显示成功消息但未发送 iOS

    所以我在使用 Google Cloud Messaging 时遇到了一个非常奇怪的问题 我遇到的问题是它正在成功注册设备 并且当发送消息时我会收到来自 Google 的成功消息 但设备永远不会收到任何消息 我从 GCM 得到的消息是 res
  • Pip 无法在 Windows 上安装 Twisted

    我正在尝试在 Windows 8 计算机上安装 Twisted 在 Twisted 官方网站上 只有一个 Windows 版的 Wheel 文件 https twistedmatrix com trac wiki Downloads htt
  • 有没有办法在 MySQL 中有效地对 TRUNCATE 或 DROP TABLE 进行 GRANT ?

    我最近在 MySQL 5 5 x 中尝试过 GRANT SELECT INSERT UPDATE DELETE TRUNCATE ON crawler TO my user localhost WITH GRANT OPTION 这会导致错
  • JetPack Compose - 卡中行中的weight() 不起作用

    创建 Android 应用程序时 我将一些可组合项放在卡片的一行中 如下所示 但它没有按我的预期工作 我添加 weight 1f 的可组合项不再显示 data class Test val title String val text Str
  • Kafka Streams - 跳跃窗口 - 去重键

    我正在 4 小时窗口上进行跳跃窗口聚合 每 5 分钟前进一次 由于跳跃窗口重叠 我得到了具有不同聚合值的重复键 TimeWindows of 240 60 1000L advanceBy 5 60 1000L 如何消除具有重复数据的重复键或
  • 跨多个域的 ASP.NET 会话

    是否有合适的 NET 解决方案来在多个域上提供持久服务器会话 即 如果该网站的用户在 www site1 com 下登录 他们也将在 www site2 com 下登录 安全是我们正在开发的程序的一个问题 Thanks 它是否需要在会话中
  • SQL Server Management Studio v18 的命令行参数登录

    使用 SQL Server 身份验证时是否仍然可以从命令行打开 SQL Server Management Studio v18 根据微软的发行说明 由于安全风险 他们删除了 P 命令行参数 因此 可以从命令行使用 SQL Server 身
  • 子类构造函数(JAVA)中的重写函数[重复]

    这个问题在这里已经有答案了 为什么在派生类构造函数中调用超类构造函数时 id 0 当创建子对象时 什么时候在堆中为该对象分配内存 在基类构造函数运行之后还是之前 class Parent int id 10 Parent meth void
  • 如何解决 greenDAO 在执行 InsertOrReplace 时“不存在这样的表错误”?

    我正在使用 greenDAO 并且已成功生成所有必需的类和实体 并且我可以看到我的表已创建 但是在要替换的行上放置断点后 我收到一条错误消息 告诉我 不存在这样的表错误 try appTimeUsageDao insertOrReplace
  • 进入后台时 Alamofire 请求卡住?

    我正在使用 Alamofire 调用 Web 服务 该服务需要相当长的时间才能加载 如果应用程序进入后台 当我返回应用程序时 我会被加载程序卡住 我想这是因为调用永远不会向我的完成处理程序返回任何内容 我该如何解决这个问题 您可以使用后台抓
  • 渐近符号的除法运算

    Suppose S n Big Oh f n T n Big Oh f n both f n 相同地属于同一类 我的问题是 为什么S n T n Big Oh 1 是不正确的 考虑S n n 2 and T n n 然后两个S and T
  • 使用taskkill停止Windows服务

    我需要帮助来使用 C 终止 Windows 服务 现在要终止该服务 请使用以下选项 从命令 sc queryex ServiceName 发现后PID服务的 taskkill pid 1234 exemple f 为了便于阅读 但如果您明白
  • 每个数据库多个/单个 *.edmx 文件

    我有一个通过 ADO net 数据服务与数据库交互的项目 数据库很大 近 150 个具有依赖关系的表 该项目几年前开始 当时使用的是数据集 现在我们正在转向实体模型关系 由于我们添加了更多需要使用的表 该模型正在不断增长 这是管理这一切的正
  • 为什么 LinkedIn v2 Share API 在任何 v2/shares 端点上给出权限不足的错误?

    当我调用任何 v2 LinkedIn 共享 API 端点时 例如https api linkedin com v2 socialActions https api linkedin com v2 socialActions share UR
  • Confluence:使用 VBA 更新现有页面

    我尝试使用 VBA 更新 Confluence 页面 我的想法是使用REST API加载页面内容 修改内容然后上传修改后的版本 这是我的代码 Private Sub TestRESTApi Dim uname As String uname
  • Log4j2 ThreadContext 映射不适用于parallelStream()

    我有以下示例代码 public class Test static System setProperty isThreadContextMapInheritable true private static final Logger LOGG