Log4j2 每日日志文件

Posted

技术标签:

【中文标题】Log4j2 每日日志文件【英文标题】:Log4j2 daily log files 【发布时间】:2016-12-15 09:18:46 【问题描述】:

我希望由 log4j2 创建的日志文件的文件名中包含日期模式,包括当前的活动文件。也就是说,如果今天的日期是 2016-12-15,我希望当前的日志文件是 lager-2016-12-15.log。当日期更改时,我希望创建一个名为 lager-2016-12-16.log 的新文件。

使用RollingFileAppender 我无法让当前活动的日志文件在文件名中包含日期模式。我的 Log4j2.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
    <Properties>
        <Property name="layoutPattern">%dISO8601 [%t] %-5p [%XREQUEST_ID] [%XCLIENT_ID] [%XUSER_ID] %c- %m%n</Property>
        <Property name="logDir">$sys:catalina.home/logs/</Property>
        <Property name="fileName">$logDirlager-$date:yyyy-MM-dd-HHmm.log</Property>
        <Property name="filePattern">$logDirlager-%dyyyy-MM-dd-HHmm.log</Property>
    </Properties>
    <Appenders>
        <RollingFile name="LAGER" append="true"
                 fileName="$fileName"
                 filePattern="$filePattern">
            <PatternLayout pattern="$layoutPattern" charset="UTF-8"/>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
            </Policies>
        </RollingFile>
    </Appenders>
    <loggers>
        <Logger name="org.apache.catalina.core.ContainerBase.[Catalina].[localhost]" level="WARN" additivity="false">
            <AppenderRef ref="LAGER" />
            <AppenderRef ref="CONSOLE"/>
        </Logger>
        <Root level="INFO">
            <AppenderRef ref="LAGER"/>
            <AppenderRef ref="CONSOLE"/>
        </Root>
    </loggers>
</Configuration>

有了这个配置,翻车时的复制就搞砸了。从 fileName 属性中删除日期模式可以解决此问题,但当前文件的名称中没有日期。

我在 tomee 7.0.1 上运行它。

【问题讨论】:

【参考方案1】:

可能已经有一个未完成的功能请求。这符合您的要求吗? https://issues.apache.org/jira/browse/LOG4J2-1101

如果是这样,请评论该 JIRA 票证。如果您能够贡献一个补丁(最好是通过单元测试),它很可能会很快得到解决。

【讨论】:

以上是关于Log4j2 每日日志文件的主要内容,如果未能解决你的问题,请参考以下文章

Log4j2进阶使用(按大小时间备份日志)

【日志】Log4j2配置

log4j2怎么输出日志到文件

日志记录:在 Spring Boot 中使用属性文件实现 Log4j2

Log4j2:如何为每个用户将日志写入单独的文件?

Spring Boot log4j2 应用程序创建一个空日志文件和一个工作日志文件