如何在log4j 2中为MDC键设置默认值?

33qvvth1  于 2022-11-06  发布在  其他
关注(0)|答案(4)|浏览(194)

在log4j中,我们有一个选项可以设置MDC键的默认值,如- mdc{key:-defaultVal}
log4j 2中是否有类似的内容?

k5hmc34c

k5hmc34c1#

MdcPatternConverter中查找,它不支持默认值。
Tickt上有未结的Jira票
我发现你也可以用这个:${ctx:<key>:-<default_value>}

g52tjvyc

g52tjvyc2#

虽然无法使用%X模式设置默认值,但可以使用%equals%equalsIgnoreCase模式来实现等效功能。
%equals{%X{<key>}}{}{<default>}

rvpgvaaj

rvpgvaaj3#

布局组件的官方参考Logback链接。

X{key:-defaultVal}

如果指定的Key值为null,则输出在**:-**运算符之后指定的默认值。
如果未指定默认值,则输出空字符串。

esbemjvw

esbemjvw4#

这似乎在某个时候已经改变了,因为现在可以指定默认值。
如果您在代码中执行类似org.apache.logging.log4j.ThreadContext.put("foo", "bar");的操作,然后在log4j 2模式中指定类似
<Pattern>%-5p [%t] %d [$${ctx:foo:-baz}] %c{1} - %m%n</Pattern>
您将在执行ThreadContext调用的同一个线程生成的日志消息中看到[bar],并在其他线程中看到[baz]。
请注意:(h/t to @Mahender Reddy Yasa in a comment above),您可以指定...[${ctx:foo}]...,它将在正确的线程中打印[bar],但在其他线程中为空-然而,我不知道为什么,如果您指定...[${ctx:foo:-baz}]...它将始终打印[baz]-您必须为它使用两个美元符号以获得正确的行为(例如...[$${ctx:foo:-baz}]...
P.S.方括号([])是不必要的,这是我的配置示例

相关问题