在log4j中,我们有一个选项可以设置MDC键的默认值,如- mdc{key:-defaultVal}log4j 2中是否有类似的内容?
k5hmc34c1#
在MdcPatternConverter中查找,它不支持默认值。Tickt上有未结的Jira票我发现你也可以用这个:${ctx:<key>:-<default_value>}个
MdcPatternConverter
${ctx:<key>:-<default_value>}
g52tjvyc2#
虽然无法使用%X模式设置默认值,但可以使用%equals和%equalsIgnoreCase模式来实现等效功能。%equals{%X{<key>}}{}{<default>}
%X
%equals
%equalsIgnoreCase
%equals{%X{<key>}}{}{<default>}
rvpgvaaj3#
布局组件的官方参考Logback链接。
X{key:-defaultVal}
如果指定的Key值为null,则输出在**:-**运算符之后指定的默认值。如果未指定默认值,则输出空字符串。
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.方括号([])是不必要的,这是我的配置示例
org.apache.logging.log4j.ThreadContext.put("foo", "bar");
<Pattern>%-5p [%t] %d [$${ctx:foo:-baz}] %c{1} - %m%n</Pattern>
...[${ctx:foo}]...
...[${ctx:foo:-baz}]...
...[$${ctx:foo:-baz}]...
4条答案
按热度按时间k5hmc34c1#
在
MdcPatternConverter
中查找,它不支持默认值。Tickt上有未结的Jira票
我发现你也可以用这个:
${ctx:<key>:-<default_value>}
个g52tjvyc2#
虽然无法使用
%X
模式设置默认值,但可以使用%equals
和%equalsIgnoreCase
模式来实现等效功能。%equals{%X{<key>}}{}{<default>}
rvpgvaaj3#
布局组件的官方参考Logback链接。
如果指定的Key值为null,则输出在**:-**运算符之后指定的默认值。
如果未指定默认值,则输出空字符串。
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.方括号([])是不必要的,这是我的配置示例