2010-04-08 80 views
37

我一直在嘗試設置一個簡單的回滾項目來按日期和文件大小滾動我的日誌文件,到目前爲止,我一直無法讓我的appender滾動到另一個文件。而是寫入由<文件/ >標記指定的日誌。在文件大小和時間上滾動回滾日誌

這裏是我的logback.xml配置文件:

<?xml version="1.0"?> 
<configuration scan="true" scanPeriod="10 seconds"> 
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender"> 
     <layout class="ch.qos.logback.classic.PatternLayout"> 
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern> 
     </layout> 
    </appender> 

    <appender name="milliroller" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
     <file>log/output.log</file> 
     <layout class="ch.qos.logback.classic.PatternLayout"> 
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern> 
     </layout> 
     <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
      <fileNamePattern>log/mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern> 
      <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> 
       <maxFileSize>1KB</maxFileSize> 
      </timeBasedFileNamingAndTriggeringPolicy> 
     </rollingPolicy> 
    </appender> 

    <root level="DEBUG"> 
     <appender-ref ref="stdout"/> 
     <appender-ref ref="milliroller"/> 
    </root> 

    <logger name="com.tkassembled.logback" level="DEBUG"/> 
</configuration> 

乍一看,它看起來像它應該工作,對不對?有什麼我做錯了嗎?我的整個可構建項目可在此處以zip形式提供:http://www.mediafire.com/file/2bxokkdyz2i/logback.zip

回答

87

雖然這是一個老問題,但我覺得一個可行的答案適合於幫助任何需要這種實現的人。

我使用以下logback配置來提供HTML日誌,按日期和文件大小進行翻轉,並記錄到控制檯以進行調試輸出。

日誌文件存儲在目錄logslogFile.html而其活性,並logFile.2013-mm-dd.i.html一個名字,當它滑過,其中i是50MB日誌文件的數量。例如logFile.2013-01-07.0.html

<configuration> 

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
    <!-- encoders are assigned the type 
     ch.qos.logback.classic.encoder.PatternLayoutEncoder by default --> 
    <encoder> 
     <charset>UTF-8</charset> 
     <pattern>%d{HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{35}) - %msg %n</pattern> 
    </encoder> 
    </appender> 

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
    <file>logs\logFile.html</file> 
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
     <!-- daily rollover --> 
     <fileNamePattern>logs\logFile.%d{yyyy-MM-dd}.%i.html</fileNamePattern> 
     <timeBasedFileNamingAndTriggeringPolicy 
      class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> 
      <!-- or whenever the file size reaches 50MB --> 
     <maxFileSize>50MB</maxFileSize> 
     </timeBasedFileNamingAndTriggeringPolicy> 
     <!-- keep 30 days' worth of history --> 
     <maxHistory>30</maxHistory> 
    </rollingPolicy> 
    <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"> 
     <charset>UTF-8</charset> 
     <layout class="ch.qos.logback.classic.html.HTMLLayout"> 
     <pattern>%d{HH:mm:ss.SSS}%thread%level%logger%line%msg</pattern> 
     </layout>   
    </encoder> 
    </appender> 

    <root level="DEBUG"> 
    <appender-ref ref="STDOUT" /> 
    <appender-ref ref="FILE" />  
    </root> 

</configuration> 
+0

謝謝!根據可讀性記錄html。 – 2016-07-14 02:48:38

+0

請參閱[AndreLDM的答案](https://stackoverflow.com/a/36707798/384674),此配置記錄'SizeAndTimeBasedFNATP已棄用.'在'logback.xml'中有'debug = true'選項 – Betlista 2018-02-09 08:35:41

+0

根據我的測試' maxHistory'不是天數,而是文件數量,所以如果你每天有更多的文件,你將有更少的天... – Betlista 2018-02-09 10:50:56

34

的logback以來1.1.7(2016年3月發佈)一個名爲SizeAndTimeBasedRollingPolicy新的appender可用,大大簡化你需要做什麼:

<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
    <file>app.log</file> 
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> 
     <fileNamePattern>app-%d{yyyy-MM-dd}.%i.log</fileNamePattern> 
     <maxFileSize>10MB</maxFileSize>  
     <maxHistory>30</maxHistory> 
     <totalSizeCap>1GB</totalSizeCap> 
    </rollingPolicy> 
    <encoder> 
     <pattern>%msg%n</pattern> 
    </encoder> 
</appender> 

進一步的信息請參見here

+0

根據我的測試,'maxHistory'不是天數,而是文件數量,所以如果每天有更多的文件,你將有更少的天數... – Betlista 2018-02-09 10:51:08

+0

除非是bug,否則[文檔](https:/ /logback.qos.ch/manual/appenders.html#SizeAndTimeBasedRollingPolicy)明確了'maxHistory'是天數(注意xml註釋)。 – AndreLDM 2018-02-09 14:26:51

+0

並非如此,[文檔](https://logback.qos.ch/manual/appenders.html#tbrpMaxHistory)顯示「可選maxHistory屬性控制要保留的最大檔案文件數......」,它們的每月示例翻轉有點令人困惑,並且在XML中的評論確實是錯誤的。我會給他們發一封電子郵件,我會讓你知道的。 – Betlista 2018-02-09 14:37:00