2017-09-06 86 views
1

我有一個java項目 我使用Logback作爲日誌框架而不是log4j項目。 Logback的體系結構足夠通用,以適用於不同的環境。 我有這個logback.xml文件預計不超過10個日誌文件在同一時間,但它並非如此Logback中的MaxBackupIndex

<?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

我覺得你的配置是混合起來的logback政策。

在您的配置使用:TimeBasedRollingPolicy,然後嘗試設置minIndexmaxIndex但這些配置屬性不可用在TimeBasedRollingPolicy,相反,他們被FixedWindowRollingPolicy的性質。

請參閱文檔TimeBasedRollingPolicyFixedWindowRollingPolicy

下面是一些例子:

  • 以下附加器定義會導致Calzada.log被翻過身來ATrackAT1Handler.%i.log每次Calzada.log達到10KB和的logback最大的10歷史文件ATrackAT1Handler.1.log到將保留ATrackAT1Handler.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> 
    
  • 以下附加器定義會導致Calzada.log被翻過身來ATrackAT1Handler.<yyy-MM-dd>.%i.log每次Calzada.log達到10KB和的logback最大的十天曆史日誌文件但將保留(這是一個很重要的區別)沒有上限的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屬性。此外,首先應用「最大歷史記錄」限制,然後再應用「總大小限額」限制。

所以,你可以用FixedWindowRollingPolicy去,你會限制文件的數量,但你不會有翻車每天或使用TimeBasedRollingPolicy獲得每日翻車並保留在歷史日誌文件佔用一些控制正在totalSizeCap