記錄springboot
專案配置logback
日誌檔案管理:
logback依賴jar包
SpringBoot
專案配置logback
理論上需要新增logback-classic
依賴jar
包:
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
但是因為SpringBoot
專案預設就是使用的就是logback
日誌系統,建立SpringBoot
專案時引入的spring-boot-starter
或者spring-boot-starter-web
依賴jar
包中已經包含了spring-boot-starter-logging
的依賴,裡面同時包含多種日誌系統依賴,如下圖所示:
包括logback和log4j,所以,無需額外新增依賴,直接配置logback.xml
就可以了。
此外,如果需要切換為log4j2
,那麼需要在spring-boot-starter-web
依賴中排除springboot
自帶的commons‐logging
,然後在引入log4j2
的依賴jar
包,如下所示:
<!--排除 commons‐logging-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>commons‐logging</groupId>
<artifactId>commons‐logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--引入log4j2 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
logback的預設配置
前面說到SpringBoot
專案預設使用logback
,那麼對於logback
的配置情況,SpringBoot
又是如何定義的呢?
首先,SpringBoot
會從resource
包下查詢logback-test.xml
或logback.xml
,如果這兩個都不存在,則會呼叫BasicConfigurator
,建立一個最小化的基本配置。
最小化配置由一個關聯到根logger
的ConsoleAppender
組成,預設輸出模式為%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
,root logger
級別為DEBUG
,所以並不會生成日誌檔案,只會輸出到控制檯。
建立logback.xml配置檔案
通過自定義logback.xml
配置檔案來控制日誌輸出情況,通常我們會配置三個日誌元件:
- 控制檯輸出
- 輸出info級別日誌檔案
- 輸出error級別日誌檔案
以下為logback.xml
完整配置
<!-- Logback configuration. See http://logback.qos.ch/manual/index.html -->
<configuration scan="true" scanPeriod="2 seconds">
<!--定義日誌檔案的儲存地址-->
<property name="LOG_PATH" value="./logs" />
<!-- 控制檯輸出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化輸出:%d表示日期,%-5level:級別從左顯示5個字元寬度,%t表示執行緒名,%msg:日誌訊息,%n是換行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level ${PID:-} --- [%t] %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<!-- info級別日誌檔案輸出 -->
<appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 日誌檔案輸出的檔名 -->
<File>${LOG_PATH}/info.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 每日生成日誌檔案或日誌檔案大小超出限制後輸出的檔名模板 -->
<fileNamePattern>${LOG_PATH}/info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 日誌檔案保留天數 -->
<maxHistory>30</maxHistory>
<!-- 日誌檔案最大大小:100MB -->
<maxFileSize>100MB</maxFileSize>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level ${PID:-} --- [%t] %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<!-- error級別日誌檔案輸出 -->
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 日誌輸出級別,優先順序 > '<root level>' -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<File>${LOG_PATH}/error.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxHistory>30</maxHistory>
<maxFileSize>100MB</maxFileSize>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level ${PID:-} --- [%t] %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<!-- 預設日誌輸出級別 -->
<root level="INFO">
<appender-ref ref="STDOUT" />
<appender-ref ref="INFO_FILE" />
<appender-ref ref="ERROR_FILE" />
</root>
</configuration>
logback配置說明
根節點configuration
<configuration scan="true" scanPeriod="2 seconds" debug="false">
</configuration>
configuration包含以下三個屬性:
- scan:配置檔案發生更改時,進行過載,預設值為true
- scanPeriod:監測配置檔案是否有修改的時間間隔,預設值為6000,預設單位為毫秒
- debug:列印logback內部日誌資訊,實時檢視logback執行狀態,預設值為false
子節點property:
<property name="LOG_PATH" value="./logs" />
用來定義變數值,包含以下兩個屬性
- name:變數名稱
- value:變數定義的值
通過property
定義的值會被插入到logger
上下文中,可以使${}
來使用變數,這裡定義了log
的儲存位置根目錄。
子節點appender:
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
</appender>
是負責寫日誌的元件,通過自定義日誌元件控制日誌輸出的情況,包含以下兩個屬性:
- name:元件名稱
- class:元件class指定的類名
不同的class,對應不同的功能:
如ch.qos.logback.core.ConsoleAppender
會把日誌輸出到控制檯
ch.qos.logback.core.rolling.RollingFileAppender
把日誌內容輸出到指定檔案
File節點:日誌檔案輸出的檔名
<File>${LOG_PATH}/info.log</File>
filter節點:過濾器,用來指定日誌元件的日誌輸出級別,優先順序高於root節點的level。
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
rollingPolicy節點:
滾動日誌檔案配置,涉及日誌檔案的移動和重新命名,只有一個class
屬性,用來指定滾動策略,這裡使用的是ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy
包含以下三個屬性:
- fileNamePattern:發生滾動時的日誌命名方式
- maxHistory:日誌檔案的最大保留時間,超過設定時間後會自動刪除
- maxFileSize:每份日誌檔案的最大限制,超出限制後會重新生成,並將舊的日誌檔案按照fileNamePattern設定的日誌命名方式進行命名
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxHistory>30</maxHistory>
<maxFileSize>100MB</maxFileSize>
</rollingPolicy>
子節點encoder
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level ${PID:-} --- [%t] %logger{50} - %msg%n</pattern>
</encoder>
對記錄事件進行格式化,負責兩件事,一是把日誌資訊轉換成位元組陣列,二是把位元組陣列寫入到輸出流。
PatternLayoutEncoder 是唯一有用的且預設的encoder ,有一個
子節點root
根loger
,是所有loger
的最上級,且只有一個level
節點,用類設定列印日誌的級別,預設值為debug
,通常設定為info
,此外還有trace、warn、error、all、off
級別。
子節點appender-ref的ref
屬性指定日誌元件名稱,即appender
的name
屬性值。
使用logback
在yml
檔案中增加logging.config
指定配置檔案地址,命名為logback時可以不需要配置,
SpringBoot`會自動查詢。
level
設定指定路徑下的日誌輸出級別。
logging:
config: classpath:logback.xml
level:
com:
springboot: debug
如圖所示,專案啟動後,訪問介面輸出日誌內容並生成指定日誌檔案: