空线程上下文支持 log4j2 中的场景处理
Posted
技术标签:
【中文标题】空线程上下文支持 log4j2 中的场景处理【英文标题】:Empty Threadcontext braces scenario handling in log4j2 【发布时间】:2017-05-24 22:43:18 【问题描述】:我正在尝试迁移到 log4j2。 在 RollingFile Appender 我添加如下:
<PatternLayout>
<pattern>[%dMM/dd/yy HH:mm:ss:SSS z] %-18.18t %-35.35c1 %-5p (%F:%L) %m \t %x %n</pattern>
</PatternLayout>
我们知道 %x 用于将堆栈元素打印到每个记录器语句的末尾。
现在如果我的堆栈最初是空的,它会给我下面的空括号。
[01/10/17 12:17:37:116 IST] main Example2 WARN (Example2.java:52) 10 is the number []
[01/10/17 12:17:37:116 IST] main Example2 WARN (Example2.java:52) 10 是数字 []
那么我该如何处理这个空栈场景呢?
【问题讨论】:
我想要没有大括号的记录器,如下所示。[01/10/17 12:17:37:116 IST] main Example2 WARN (Example2.java:52) 10 is the number
【参考方案1】:
你可以使用PatternLayout的notEmptypattern
模式转换器:
当且仅当模式中的所有变量都不为空时,才会输出模式的评估结果。
例如:
%notEmpty[%x]
别名:variablesNotEmptypattern, varsNotEmpty模式, notEmpty模式
【讨论】:
这行不通。它将%notEmpty[%x]
作为 %n 并将记录器带到下一行。
你用的是什么版本?这个功能是相当新的。你试过varsNotEmpty
吗?
2.7 版?还是更老的东西?
现在输出记录器是[01/11/17 12:22:59:693 IST] main Example2 DEBUG (Example2.java:56) 10 is the number otEmpty
无法迁移到 v2.7,因为无法超越 Java 6。因此我使用的是 log4j v2.3以上是关于空线程上下文支持 log4j2 中的场景处理的主要内容,如果未能解决你的问题,请参考以下文章
当每个线程可以处理与其他线程中的数据无关的数据时,是不是可以在线程之间重用一个共享托管对象上下文?