springboot項目中logback日誌幾種配置方式

  • springboot項目中logback日誌幾種配置方式
  • logback簡介
  • 配置文件詳解
  • 常用日誌輸出格式
  • 按時間回滾
  • 按時間和大小回滾
  • 自定義回滾週期
  • 注意事項
  • 參考文獻

springboot項目中logback日誌幾種配置方式

logback簡介

Logback由log4j的創始人CekiGülcü設計,是流行的日誌框架log4j項目的後續版本。logback建立在CekiGülcü長久的工業級項目的設計經驗之上, 其資源佔用及運行效率,要低於現存的所有日誌框架,並提供了一些在其它日誌系統中不存在的功能。 springboot當前默認的日誌框架是logback,所以使用起來也是非常方便。

Logback被分為3個組件:

  • logback-core
  • logback-classic
  • logback-access

其中logback-core提供了LogBack的核心功能,是另外兩個組件的基礎。 logback-classic則實現了Slf4j的API,所以當想配合Slf4j使用時,需要將logback-classic加入classpath。logback-access是為了集成Servlet環境而準備的,可提供HTTP-access的日誌接口。

配置文件詳解

一個完整的logback配置文件由三部分組成,如下圖所示:

  • appender 負責寫日誌的組件,對日誌的輸出格式以及滾動規則進行配置
  • logger 用來設置某一個包或者具體的某一個類的日誌打印級別、以及指定appender
  • root 根logger,可以包含零個或多個appender-ref元素,表示這個appender將會添加到這個logger
springboot項目中logback日誌幾種配置方式

配置文件結構如下所示:


<configuration>

<property>
<property>

<contextname>${contextName}/<contextname>

<appender>

/<appender>

<appender>

/<appender>

<appender>

/<appender>

<appender>

/<appender>

<logger>


/<logger>
<root>

/<root>
/<configuration>

常用日誌輸出格式


<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n/<pattern>

按時間回滾

  • 日誌按照時間滾動,按照fileNamePattern節點配置的最小時間單位(此處按分鐘切割)滾動切割日誌
  • 保留三十個時間週期內的日誌

配置文件如下所示:


<configuration>
<property>

<appender>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n/<pattern>
/<encoder>
/<appender>

<appender>
<file>${logDir}/error.log/<file>
<rollingpolicy>
<filenamepattern>${logDir}/%d{yyyy-MM-dd_HH-mm}-error.log/<filenamepattern>
<maxhistory>30/<maxhistory>
/<rollingpolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger - %msg%n/<pattern>
/<encoder>
<filter>
<level>ERROR/<level>
<onmatch>ACCEPT/<onmatch>
<onmismatch>DENY/<onmismatch>
/<filter>
/<appender>

<appender>
<file>${logDir}/access.log/<file>
<rollingpolicy>
<filenamepattern>${logDir}/%d{yyyy-MM-dd_HH-mm}-access.log/<filenamepattern>
<maxhistory>30/<maxhistory>
/<rollingpolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger - %msg%n/<pattern>
/<encoder>
/<appender>

<appender>
<file>${logDir}/info.log/<file>
<rollingpolicy>
<filenamepattern>${logDir}/%d{yyyy-MM-dd_HH-mm}-info.log/<filenamepattern>
<maxhistory>30/<maxhistory>
/<rollingpolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger - %msg%n/<pattern>
/<encoder>
<filter>
<level>INFO/<level>
<onmatch>ACCEPT/<onmatch>

<onmismatch>DENY/<onmismatch>
/<filter>
/<appender>
<logger>
<level>
<appender-ref>
<appender-ref>
<appender-ref>
<appender-ref>
/<logger>
<root>
<appender-ref>
/<root>
/<configuration>

按時間和大小回滾

  • 日誌按照時間和大小滾動,按照fileNamePattern節點配置的最小時間單位(此處按分鐘切割)滾動切割日誌
  • 當日志大於10MB時,切割出新的日誌文件,以數字 i 區分日誌文件
  • 保留三十個時間週期內的日誌

配置文件如下所示:


<configuration>
<property>

<appender>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n/<pattern>
/<encoder>
/<appender>

<appender>
<file>${logDir}/error.log/<file>
<rollingpolicy>
<filenamepattern>${logDir}/%d{yyyy-MM-dd_HH-mm}.%i-error.log/<filenamepattern>
<maxfilesize>10MB/<maxfilesize>
<maxhistory>30/<maxhistory>
/<rollingpolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger - %msg%n/<pattern>
/<encoder>
<filter>
<level>ERROR/<level>
<onmatch>ACCEPT/<onmatch>
<onmismatch>DENY/<onmismatch>
/<filter>
/<appender>

<appender>
<file>${logDir}/access.log/<file>
<rollingpolicy>
<filenamepattern>${logDir}/%d{yyyy-MM-dd_HH-mm}.%i-access.log/<filenamepattern>
<maxfilesize>10MB/<maxfilesize>
<maxhistory>30/<maxhistory>
/<rollingpolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger - %msg%n/<pattern>
/<encoder>
/<appender>

<appender>
<file>${logDir}/info.log/<file>
<rollingpolicy>
<filenamepattern>${logDir}/%d{yyyy-MM-dd_HH-mm}.%i-info.log/<filenamepattern>
<maxfilesize>10MB/<maxfilesize>
<maxhistory>30/<maxhistory>
/<rollingpolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger - %msg%n/<pattern>
/<encoder>
<filter>
<level>INFO/<level>
<onmatch>ACCEPT/<onmatch>
<onmismatch>DENY/<onmismatch>
/<filter>
/<appender>
<logger>

<level>
<appender-ref>
<appender-ref>
<appender-ref>
<appender-ref>
/<logger>
<root>
<appender-ref>
/<root>
/<configuration>

自定義回滾週期

logback默認配置都是按照每天,每小時,每分鐘這樣來滾動切割日誌的,如果想自定義滾動週期,則需要 實現DefaultTimeBasedFileNamingAndTriggeringPolicy,重寫computeNextCheck方法

@NoAutoStart
public class SelfDefineTimeBasedFileNamingAndTriggeringPolicy extends DefaultTimeBasedFileNamingAndTriggeringPolicy {
private Integer multiple = 1;
@Override
protected void computeNextCheck() {
nextCheck = rc.getEndOfNextNthPeriod(dateInCurrentPeriod, multiple).getTime();
}
public Integer getMultiple() {
return multiple;
}
public void setMultiple(Integer multiple) {
if (multiple > 1) {
this.multiple = multiple;
}
}
}

配置文件如下:


<configuration>
<property>

<appender>
<encoder>

<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n/<pattern>
/<encoder>
/<appender>

<appender>
<file>${logDir}/error.log/<file>
<rollingpolicy>
<filenamepattern>${logDir}/%d{yyyy-MM-dd_HH-mm}-error.log/<filenamepattern>
<timebasedfilenamingandtriggeringpolicy>>
<multiple>3/<multiple>
/<timebasedfilenamingandtriggeringpolicy>
<maxhistory>30/<maxhistory>
/<rollingpolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger - %msg%n/<pattern>
/<encoder>
<filter>
<level>ERROR/<level>
<onmatch>ACCEPT/<onmatch>
<onmismatch>DENY/<onmismatch>
/<filter>
/<appender>

<appender>
<file>${logDir}/access.log/<file>
<rollingpolicy>
<filenamepattern>${logDir}/%d{yyyy-MM-dd_HH-mm}-access.log/<filenamepattern>
<timebasedfilenamingandtriggeringpolicy>>
<multiple>3/<multiple>
/<timebasedfilenamingandtriggeringpolicy>
<maxhistory>30/<maxhistory>
/<rollingpolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger - %msg%n/<pattern>
/<encoder>
/<appender>

<appender>
<file>${logDir}/info.log/<file>
<rollingpolicy>
<filenamepattern>${logDir}/%d{yyyy-MM-dd_HH-mm}-info.log/<filenamepattern>
<timebasedfilenamingandtriggeringpolicy>>
<multiple>3/<multiple>
/<timebasedfilenamingandtriggeringpolicy>
<maxhistory>30/<maxhistory>

/<rollingpolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger - %msg%n/<pattern>
/<encoder>
<filter>
<level>INFO/<level>
<onmatch>ACCEPT/<onmatch>
<onmismatch>DENY/<onmismatch>
/<filter>
/<appender>
<logger>
<level>
<appender-ref>
<appender-ref>
<appender-ref>
<appender-ref>
/<logger>
<root>
<appender-ref>
/<root>
/<configuration>

注意事項

當日志滾動週期內,沒有日誌生成時,是不會觸發日誌切割生成新的日誌文件的;在學習logback配置時,容易造成困惑,從而懷疑配置問題,其實配置是沒有問題的。

參考文獻

  • logback官方文檔
  • logback配置實例 https://github.com/Haiyoung/HyProject/tree/master/logback_test
  • logback 指定每隔一段時間創建一個日誌文件


分享到:


相關文章: