我正在尝试使用带有10个日志文件的log4j2(2.0.2)在tomcat 7.0.23中配置RollingFile附加程序。

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

有趣的是,在tomcat / logs下创建了第一个日志文件(没有数字),这意味着可以成功地将filename属性映射到真实路径。

当我用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>

这意味着无法正确解释filePattern。

如何克服此问题而不必静态指定日志目录?

谢谢您的帮助

最佳答案

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

如果您赶时间,可以从本地2.1-SNAPSHOT的Log4j2 GIT repositorybuild中检出代码。

08-04 10:50