LoggerConfig(包括根LoggerConfig)可以配置属性,这些属性将添加到从ThreadContextMap复制的属性中。这些属性可以从Appenders,Filters,Layouts等引用,就像它们是ThreadContext Map的一部分一样。
但是,我找不到怎么做。我尝试过以下方法:
<Configuration>
<Appenders>
<Console name="stdout">
<PatternLayout charset="UTF-8">
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{concern}] [%-5p] %c: %m%n</Pattern>
</PatternLayout>
</Console>
</Appenders>
<Loggers>
<Root level="INFO">
<AppenderRef ref="stdout"/>
</Root>
<Logger name="com.example.log4j2.Foo">
<Properties>
<Property name="concern">foo</Property>
</Properties>
</Logger>
<Logger name="com.example.log4j2.Bar">
<Properties>
<Property name="concern">bar</Property>
</Properties>
</Logger>
</Loggers>
</Configuration>
使用此配置,ThreadContextMap将没有任何“关注”键,StatusLogger将输出:
错误尝试将属性属性分配给类型类org.apache.logging.log4j.core.lookup.Interpolator的列表,该类与类org.apache.logging.log4j.core.config.Property不兼容。
ERROR logger Logger没有与元素属性匹配的参数
如何将属性附加到依赖于记录器的日志事件?
答案 0 :(得分:1)
我通过搜索log4j git repo找到了解决方案:<Property/>
元素必须是<Logger/>
元素的直接子元素。
请参阅测试资源中的log4j-loggerprops.xml文件:
<Configuration status="OFF" strict="false" name="DSI">
<Properties>
<Property name="test2">test2default</Property>
<Property name="attribKey" value="attribValue" />
<Property name="duplicateKey" value="attribValue">nodeValue</Property>
<Property name="test5">${sys:test:-${sys:test2}}</Property>
</Properties>
<Appenders>
<List name="List">
<PatternLayout pattern="[%-5level] %c{1.} user=%X{user} phrasex=%X{phrasex} test=%X{test} test2=$${sys:test2} test3=$${sys:test3:-Unknown} test4=$${sys:test3:-${sys:test}} test5=${test5} attribKey=$${attribKey} duplicateKey=$${duplicateKey}%msg%n" />
</List>
</Appenders>
<Loggers>
<Logger name="org.apache.logging.log4j.core" level="debug" additivity="false">
<Property name="user">$${sys:user.name}</Property>
<Property name="phrasex">${sys:user.phrasex:-****}</Property>
<Property name="test">${sys:test}</Property>
<AppenderRef ref="List"/>
</Logger>
<Root level="debug">
<Property name="user">${sys:user.name}</Property>
<Property name="phrasex">${sys:user.phrasex:-****}</Property>
<Property name="test">${sys:test}</Property>
<AppenderRef ref="List" />
</Root>
</Loggers>
</Configuration>