【问题标题】:Log4j logrotation - split log file daily and archive after 2 daysLog4j logrotation - 每天拆分日志文件并在 2 天后存档
【发布时间】:2017-01-14 18:04:14
【问题描述】:

我在 Spring MCV 应用程序中使用 log4j,我需要每天拆分日志文件,但需要将旧文件保留 2 天,之后需要存档文件。我怎样才能做到这一点? 我的配置如下,

    <Appenders>
    <File name="INBOUND-ERROR" fileName="${log-path}/inbound-errors.log" append="false">
        <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}.%M() :line%L - %m%n"/>
    </File>
    <File name="OUTBOUND-ERROR" fileName="${log-path}/outbound-errors.log" append="false">
        <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}.%M() :line%L - %m%n"/>
    </File>
    <File name="ENCRYPTIONDECRYPTION-ERROR" fileName="${log-path}/encryptiondecryption-errors.log" append="false">
        <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}.%M() :line%L - %m%n"/>
    </File>
    <Console name="STDOUT" target="SYSTEM_OUT">
        <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}.%M() :line%L - %m%n"/>
    </Console>
    <File name="INBOUND-ADMIN" fileName="${log-path}/inbound-admin.log" append="false">
        <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}.%M() :line%L - %m%n"/>
    </File>
    <File name="OUTBOUND-ADMIN" fileName="${log-path}/outbound-admin.log" append="false">
        <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}.%M() :line%L - %m%n"/>
    </File>
    <RollingFile name="RollingFile-Inbound-Appender"
                 fileName="${log-path}/inbound.log"
                 filePattern="${archive}/inbound.log.%d{yyyy-MM-dd}.%i.log.gz">
        <PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}.%M() :line%L - %m%n"/>
        <Policies>
            <TimeBasedTriggeringPolicy/>
            <SizeBasedTriggeringPolicy size="300 MB"/>
        </Policies>
        <DefaultRolloverStrategy max="300000"/>
    </RollingFile>
    <RollingFile name="RollingFile-Outbound-Appender"
                 fileName="${log-path}/outbound.log"
                 filePattern="${archive}/outbound.log.%d{yyyy-MM-dd}.%i.log.gz">
        <PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}.%M() :line%L - %m%n"/>
        <Policies>
            <TimeBasedTriggeringPolicy/>
            <SizeBasedTriggeringPolicy size="300 MB"/>
        </Policies>
        <DefaultRolloverStrategy max="300000"/>
    </RollingFile>
</Appenders>

【问题讨论】:

  • 不确定这是否可以通过仅 log4j 的方式实现。你在什么操作系统上?也许您可以编写一个批处理脚本、Powershell 脚本或 bash 脚本,通过 cron 或 windows 任务调度程序每天(或晚上)运行一次以归档“旧”文件。
  • @Fildor,我用的是centos

标签: java spring log4j2 centos6


【解决方案1】:

anwser 对 log4j2 有效(这令人困惑 - 您为 log4j2 放置了标签,但在您提到的 log4j 问题中)。

TimeBasedTriggeringPolicyinterval 属性应该可以发挥作用。它应用于日期模式中最具体的时间单位(请参阅manual)。所以,应该是这样的:

<RollingFile name="RollingFile-Inbound-Appender"
             fileName="${log-path}/inbound.log"
             filePattern="${archive}/inbound.log.%d{yyyy-MM-dd}.%i.log.gz">
    <PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}.%M() :line%L - %m%n"/>
    <Policies>
        <TimeBasedTriggeringPolicy interval=2/>
        <SizeBasedTriggeringPolicy size="300 MB"/>
    </Policies>
    <DefaultRolloverStrategy max="300000"/>
</RollingFile>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-26
    • 1970-01-01
    • 2019-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多