2017-06-22 92 views
0

我在我的項目中使用了logback。我有問題只存儲當天的日誌。 我的logback appender的配置:Logback。只存儲當天的日誌

<appender name="appender" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
    <file>log/log.log</file> 
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
     <!-- daily rollover --> 
     <fileNamePattern>log/log.%d{yyyy-MM-dd}.%i.zip</fileNamePattern> 
     <timeBasedFileNamingAndTriggeringPolicy 
       class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> 
      <maxFileSize>512MB</maxFileSize> 
     </timeBasedFileNamingAndTriggeringPolicy> 
     <maxHistory>1</maxHistory> 
    </rollingPolicy> 
    <encoder> 
     <charset>utf-8</charset> 
     <pattern>%d{dd-MM HH:mm:ss.SSS} [%thread] %-5level %logger{66} - %msg%n</pattern> 
    </encoder> 
</appender> 

我想看到的文件log.2017-06.22.0.zip,log.2017-06.22.1.zip ..如果當前的日期是2017年6月22日。所有以前的日誌都必須刪除。如果我將maxHistory設置爲1,則會看到當前的日誌和前一天的日誌。請幫幫我。

+0

你想達到什麼目的?你的業務需求是什麼?使用您的設置,您只能獲得一個歷史文件,每個文件的最大大小爲512 Mb。如果您的應用程序在一天內生成超過1g的日誌,那麼當天就會丟失日誌(如果進入致命循環,您將很快擁有堆滿了堆棧跟蹤和缺少第一原因日誌行的日誌)。 同樣,如果你刪除了最後一天的日誌,你將如何診斷23:59發生的錯誤? – lbndev

+0

@ibndev我只需要當前日誌。我沒有問題來診斷23:59發生的錯誤。只有當天。從0:00到23:59。現在我的應用程序生成超過1克的日誌,並且我有許多日誌,如log.2017-06.22.0.zip,log.2017-06.22.1.zip ..對我來說沒關係。 –

回答

0

不幸的是,對於當前版本的logback(1.2.3),我不認爲這是可能的。檢查ch.qos.logback.core.rolling.helper.TimeBasedArchiveRemover的源代碼,看看參數maxHistory如何使用:

// below is line 97 
void capTotalSize(Date now) { 
    long totalSize = 0; 
    long totalRemoved = 0; 
    for (int offset = 0; offset < maxHistory; offset++) { 
     // snip : execute removal 
     // notice that if you set maxHistory to 0 or -1 the loop contents will not be executed at all. 
    } 
    addInfo("Removed " + new FileSize(totalRemoved) + " of files"); 
} 

您可能要提交功能要求(或PR)到項目的logback 。