Logback中的MaxBackupIndex

时间:2017-09-06 15:09:44

标签: java logging log4j logback slf4j

我有一个java项目 我使用Logback作为日志框架而不是log4j项目。 Logback的架构足够通用,以便在不同情况下应用。 我有这个logback.xml文件同时期望不超过10个日志文件,但事实并非如此

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

    <property name="DEV_HOME" value="" />

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>
                %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
            </Pattern>
        </layout>
    </appender>

    <appender name="FILE-AUDIT" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>Calzada.log</file>
        <encoder>
            <pattern>%d{"yyyy-MM-dd HH:mm"} [%thread] %-5level %logger{35} - %msg%n</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- rollover daily -->
            <fileNamePattern>ATrackAT1Handler.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <minIndex>1</minIndex>
            <maxIndex>10</maxIndex>
            <maxHistory>10</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy
                class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>10KB</maxFileSize>

            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>     
    </appender>

    <appender name="FILE-ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>CalzadaError.log</file>
        <encoder>
            <pattern>%d{"yyyy-MM-dd HH:mm"} [%thread] %-5level %logger{35} - %msg%n</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- rollover daily -->
            <fileNamePattern>ATrackAT1HandlerError.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy
                class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>10KB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>     
    </appender>



    <logger name="com.calzada" level="debug"
        additivity="false">
        <appender-ref ref="FILE-AUDIT" />
        <appender-ref ref="STDOUT" />
    </logger>

   <root level="error">
        <appender-ref ref="FILE-ERROR" />
    </root>

</configuration> 

1 个答案:

答案 0 :(得分:3)

我认为您的配置混合了Logback策略。

在您的配置中,您使用:TimeBasedRollingPolicy,然后尝试设置minIndexmaxIndex,但这些配置属性在TimeBasedRollingPolicy上不可用,而是属于FixedWindowRollingPolicy

请参阅TimeBasedRollingPolicyFixedWindowRollingPolicy的文档。

以下是一些例子:

  • 以下appender定义会导致Calzada.log每次ATrackAT1Handler.%i.log达到 10KB 时转为Calzada.log,Logback将保留最多<强> 10个历史文件即ATrackAT1Handler.1.logATrackAT1Handler.10.log

    <appender name="FILE-AUDIT" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>Calzada.log</file>
        <encoder>
            <pattern>%d{"yyyy-MM-dd HH:mm"} [%thread] %-5level %logger{35} - %msg%n</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <fileNamePattern>ATrackAT1Handler.%i.log</fileNamePattern>
            <minIndex>1</minIndex>
            <maxIndex>10</maxIndex>
        </rollingPolicy>
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>10KB</maxFileSize>
        </triggeringPolicy>
    </appender>
    
  • 以下appender定义会导致Calzada.log每次ATrackAT1Handler.<yyy-MM-dd>.%i.log达到 10KB 时转为Calzada.log,Logback将保留最多<强大> 10天的历史日志文件,但(这是一个重要的区别)Logback将在每天内滚动的文件数没有上限。因此,您可以ATrackAT1Handler.2017-09-06.0.logATrackAT1Handler.2017-09-06.20.log,然后第二天就可以ATrackAT1Handler.2017-09-07.0.logATrackAT1Handler.2017-09-07.12.log等。

    <appender name="FILE-AUDIT" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>Calzada.log</file>
        <encoder>
            <pattern>%d{"yyyy-MM-dd HH:mm"} [%thread] %-5level %logger{35} - %msg%n</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>ATrackAT1Handler.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <maxFileSize>10KB</maxFileSize>
            <maxHistory>10</maxHistory>
        </rollingPolicy>
    </appender> 
    

因此,FixedWindowRollingPolicy允许您控制历史文件的数量和大小,而TimeBasedRollingPolicy允许您控制历史文件的天数和每个文件的大小。 TimeBasedRollingPolicy似乎缺少一个部分,即我们如何限制所有日期内所有文件的总大小?为填补这一空白,TimeBasedRollingPolicy提供了配置属性:totalSizeCap。来自文档:

  

totalSizeCap int

     

可选的totalSizeCap属性控制所有存档文件的总大小。超过总大小上限时,将异步删除最旧的归档。 totalSizeCap属性也需要设置maxHistory属性。而且,&#34;最大历史&#34;始终首先应用限制,并且&#34;总大小上限&#34;限制适用第二。

因此,您可以选择使用FixedWindowRollingPolicy并限制文件数量,但不会有每日翻转或使用TimeBasedRollingPolicy获取每日翻转并保留<通过ising totalSizeCap,某些控制历史日志文件的足迹。