【问题标题】:DefaultRolloverStrategy In log4j2log4j2 中的 DefaultRolloverStrategy
【发布时间】:2018-08-24 13:56:14
【问题描述】:

我在为 log4j2.xml 配置“DefaultRolloverStrategy”以执行以下操作时遇到问题:-

确保仅保留最后 4 个日志文件,并删除较旧的日志文件。 所以要清楚,最后 4 个日志文件可能超过几天或同一天,因此, 最后 4 个日志文件可能具有相同的日期或跨越不同的日期。

下面是log4j2.xml的内容

    <?xml version="1.0" encoding="UTF-8" ?>
    <Configuration>

        <Appenders>
            <!-- Console Appender -->
            <Console name="Console" target="SYSTEM_OUT">
                <PatternLayout pattern="%d{DEFAULT} [%t] %-5level %logger{36} - %msg%n" />
            </Console>
            <!-- Rolling File Appender -->
            <RollingFile name="File" fileName="app_log.log"
                filePattern="app_log-%d{yyyy-MM-dd}.%i.log">
                <PatternLayout pattern="%d{DEFAULT} [%t] %-5level %logger{36} - %msg%n" />
                <Policies>
                    <TimeBasedTriggeringPolicy />
                    <SizeBasedTriggeringPolicy size="2 KB" />
                </Policies>

                <DefaultRolloverStrategy>
                    <Delete basePath="" maxDepth="1">
                        <IfFileName glob="app_log*.txt">
                            <IfAny>
                                <IfAccumulatedFileSize exceeds="5 KB" />
                                <IfAccumulatedFileCount exceeds="4" />
                            </IfAny>
                        </IfFileName>
                    </Delete>
                </DefaultRolloverStrategy>

                </RollingFile>
        </Appenders>

        <Loggers>

            <Logger name="com.app.utilities" level="info" additivity="true">
                <AppenderRef ref="File" />
            </Logger>

            <Root level="debug">
                <AppenderRef ref="Console" />
            </Root>

        </Loggers>
    </Configuration>

我运行我的应用程序如下所示

java  -Dlog4j.configurationFile=./app-log4j2.xml -jar application.jar

日志是在调用上述命令的同一目录中生成的。

以下是日志文件的示例历史记录:-

File Name                   Date Modified

app_log.log                 8/27/2018 2:25 PM
app_log-2018-08-27.2.log    8/27/2018 2:25 PM
app_log-2018-08-27.1.log    8/27/2018 2:11 PM
app_log-2018-08-26.5.log    8/26/2018 2:01 PM
app_log-2018-08-26.4.log    8/26/2018 2:00 PM
app_log-2018-08-26.3.log    8/26/2018 1:58 PM
app_log-2018-08-26.2.log    8/26/2018 1:57 PM
app_log-2018-08-26.1.log    8/26/2018 1:56 PM

“DefaultRolloverStrategy”似乎没有效果。

我认为我的配置是错误的。但是,我非常感谢您的建议 请纠正这个问题。

此外,如果要求进行更改,以便删除超过 20 天的日志文件。 怎么可能达到。

非常感谢您的帮助

皮特

【问题讨论】:

    标签: log4j2 log4j


    【解决方案1】:

    看看下面一行:

    <IfFileName glob="app_log*.txt">
    

    但是您的日志文件不以.txt 结尾!见:

    File Name                   Date Modified
    
    app_log.log                 8/27/2018 2:25 PM
    

    您可能需要将其更改为:

    <IfFileName glob="app_log*.log">
    

    这就是我真正想到的。您可能还需要进行一些调整,但请先尝试。

    【讨论】:

    • Dovmo - 好地方,谢谢。另一个问题似乎是 basePath 不能为空,所以我改为 这似乎有效。现在来看 - “如果要求进行更改,以便删除大于 20 天的日志文件。如何实现。”
    • 很好,下面删除了超过 2 天的文件 下面将确保只保留最后 6 个文件 尝试将规则组合如下:- 基于此链接stackoverflow.com/questions/44588333/…但是,只有 2 天规则有效,但文件计数无效。有什么想法吗?
    • 您可能应该在新的 SO 帖子中提出这些问题
    猜你喜欢
    • 2014-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-18
    • 1970-01-01
    • 2015-11-09
    • 1970-01-01
    相关资源
    最近更新 更多