Log4j 2:无法在RollingFileAppender fileName和filePattern中使用ContextMapLookup

时间:2014-10-16 13:16:40

标签: java logging configuration log4j2 rollingfileappender

我正在使用log4j 2.0.2进行日志记录。我正在尝试将ContextMapLookup用于RollingFileAppender的fileName和filePattern属性,但我无法使其工作。

这是我在REST外观中的(简化)Map初始化:

@GET
public Response logSomething(@QueryParam("param") String param) {
    ThreadContext.put("someName", "default");
    LOGGER.info("Param from query: {}", param);
    ThreadContext.clearMap();
    return Response.ok().build();
}

这是我的(简化到)配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
  <Appenders>
    <Console name="STDOUT" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %5p %c{1}:%L - %m%n" />
    </Console>
    <RollingFile name="Rolling" 
                 fileName="logs/${ctx:someName}-webapps-metrics.log"
                 filePattern="logs/archives/${ctx:someName}-webapps-metrics-%i.log" >
      <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %m%n"/>
      <SizeBasedTriggeringPolicy size="5 KB"/>
    </RollingFile>
  </Appenders>
  <Loggers>

    <!-- My Logger using rollingFile -->
    <Logger name="com.ipanematech.rest.MyRESTFacade" level="info" additivity="false">
      <AppenderRef ref="Rolling" />
    </Logger>
    <Root level="warn">
      <AppenderRef ref="STDOUT" />
    </Root>
  </Loggers>
</Configuration>

一个名为&#34; {ctx&#34;在目录中创建。似乎获取上下文的表达式在这些属性中不起作用。

我尝试在我的appender的PatternLayout中使用上下文,但效果很好。

在fileName和filePattern中,我尝试了不同的语法,但没有尝试过:

  • $ {ctx:someName}(如上例所示)

  • $$ {CTX:someName}

  • %X {someName}

1 个答案:

答案 0 :(得分:1)

RoutingAppender可以满足您的需求。有关detailed example的信息,请参阅log4j2常见问题解答页面。