java - Log4j 2 : can't use the ContextMapLookup in RollingFileAppender fileName and filePattern

标签 java logging configuration log4j2 rollingfileappender

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

这是我在 REST facade 中的(简化的) 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>

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

我尝试在我的 appender 的 PatternLayout 中使用上下文,它运行良好。

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

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

  • $${ctx:someName}

  • %X{someName}

最佳答案

RoutingAppender 做你想做的。请参阅 log4j2 FAQ 页面以获取 detailed example .

关于java - Log4j 2 : can't use the ContextMapLookup in RollingFileAppender fileName and filePattern,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26405456/

相关文章:

java - Scala Play 框架 : logger pattern for displaying file and line

security - 更改 Joomla 管理员 URL

wcf - 超时 WCF 服务

java抽象方法错误

java - 根据屏幕大小调整自定义 View 的大小

python - 在python中的类之间记录

java - 更改日志语言 Spring Boot

java - 从 spring 重定向 url 中删除项目名称前缀

java - ArrayList中如何区分String和Integer?

postgresql - 将 PostgreSQL 配置为仅适用于 LOCALHOST 或指定的 ip + 端口