Log4j2:RollingFile appender 中的 filePattern 的属性替换工作不正确

Art*_*nos 5 java logging rollingfileappender tomcat7 log4j2

我正在尝试使用 log4j2(2.0.2) 和 10 个日志文件在 tomcat 7.0.23 中配置 RollingFile appender。

我在 filePattern 中使用 ${sys:catalina.base},它不起作用,日志文件放在 tomcat/bin/${sys:catalina.base}/ 目录中。

有趣的部分是第一个日志文件(没有数字)在 tomcat/logs 下创建正常 - 这意味着它成功地将文件名属性映射到真实路径。

当我用 filePattern="C:/apache-tomcat-7.0.23/logs/app.%i.log" 替换 ${sys:catalina.base} 时,它可以工作。

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
    <Appenders>
        <Console name="CONSOLE" target="SYSTEM_OUT">
            <PatternLayout pattern="%d %-5p [%X{REQ_ID}] [%c{1}] %m%n"/>
        </Console>
        <RollingFile name="FILE" fileName="${sys:catalina.base}/logs/app.log"
                     filePattern="${sys:catalina.base}/logs/app.%i.log">
            <PatternLayout pattern="%d %-5p [%X{REQ_ID}] [%c{1}] %m%n"/>
            <Policies>
                <SizeBasedTriggeringPolicy size="10 MB" />
            </Policies>
            <DefaultRolloverStrategy max="10"/>
        </RollingFile>
    </Appenders>
    <Loggers>
        <Root level="info">
            <appender-ref ref="CONSOLE" />
            <appender-ref ref="FILE" />
        </Root>
    </Loggers>
</Configuration>
Run Code Online (Sandbox Code Playgroud)

这意味着 filePattern 没有正确解释。

如何在不必静态指定日志目录的情况下克服这个问题?

谢谢您的帮助

Rem*_*pma 3

您所描述的内容看起来非常类似于LOG4J2-829中报告的问题。这是 2.0-RC2 版本中引入的错误。它最近在 master 中得到修复,修复将包含在即将发布的 2.1 版本中。(我希望 2.1 会在下周某个时间发布 - 但没有承诺......)

如果您赶时间,可以从Log4j2 GIT 存储库查看代码并在本地构建2.1-SNAPSHOT。

  • 2.1 的发布过程已经开始,团队现在正在验证发布。如果没有发现任何精彩内容,应该会在三天内上市。 (2认同)
  • 感谢您的赏金!我实际上认为它_是_(几天后,_是_)log4j 的问题:如果该错误没有得到修复,那么常见的用例(例如包含“${sys:user.home}”的路径)将无法工作。有几个人遇到过这个问题,我很高兴这很快就不再是问题了。 (2认同)