Java 设置特定Log4j2记录器的属性

Java 设置特定Log4j2记录器的属性,java,log4j2,Java,Log4j2,根据: LoggerConfig(包括根LoggerConfig)可以配置属性,这些属性将添加到从ThreadContextMap复制的属性中。这些属性可以从附加器、过滤器、布局等引用,就像它们是ThreadContext映射的一部分一样 然而,我找不到怎么做。我尝试了以下方法: <Configuration> <Appenders> <Console name="stdout"> <PatternLayout

根据:

LoggerConfig(包括根LoggerConfig)可以配置属性,这些属性将添加到从ThreadContextMap复制的属性中。这些属性可以从附加器、过滤器、布局等引用,就像它们是ThreadContext映射的一部分一样

然而,我找不到怎么做。我尝试了以下方法:

<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>

%d{yyyy-MM-dd HH:MM:ss.SSS}[%X{concern}][%-5p]%c:%m%n
福
酒吧
使用此配置,ThreadContextMap将不会有任何“关注”键,并且状态记录器将输出:

尝试将属性属性属性分配给类型为org.apache.logging.log4j.core.lookup.Interpolator的列表时出错,该类型与类org.apache.logging.log4j.core.config.Property不兼容

错误记录器没有与元素属性匹配的参数


如何将属性附加到依赖于记录器的日志事件?

我通过搜索log4j git repo找到了解决方案:
元素必须是
元素的直接子元素

请参阅测试资源中的文件:

<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>

test2default
节点值
${sys:test:-${sys:test2}
$${sys:user.name}
${sys:user.phrasex:-***}
${sys:test}
${sys:user.name}
${sys:user.phrasex:-***}
${sys:test}