記錄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>
但是因?yàn)?code>SpringBoot項目默認(rèn)就是使用的就是logback
日志系統(tǒng),創(chuàng)建SpringBoot
項目時引入的spring-boot-starter
或者spring-boot-starter-web
依賴jar
包中已經(jīng)包含了spring-boot-starter-logging
的依賴,里面同時包含多種日志系統(tǒng)依賴,如下圖所示:
包括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的默認(rèn)配置
前面說到SpringBoot
項目默認(rèn)使用logback
袜啃,那么對于logback
的配置情況汗侵,SpringBoot
又是如何定義的呢?
首先群发,SpringBoot
會從resource
包下查找logback-test.xml
或logback.xml
晰韵,如果這兩個都不存在,則會調(diào)用BasicConfigurator
熟妓,創(chuàng)建一個最小化的基本配置雪猪。
最小化配置由一個關(guān)聯(lián)到根logger
的ConsoleAppender
組成,默認(rèn)輸出模式為%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
起愈,root logger
級別為DEBUG
只恨,所以并不會生成日志文件,只會輸出到控制臺抬虽。
創(chuàng)建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>
<!-- 日志文件保留天數(shù) -->
<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">
<!-- 日志輸出級別,優(yōu)先級 > '<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>
<!-- 默認(rèn)日志輸出級別 -->
<root level="INFO">
<appender-ref ref="STDOUT" />
<appender-ref ref="INFO_FILE" />
<appender-ref ref="ERROR_FILE" />
</root>
</configuration>
logback配置說明
根節(jié)點(diǎn)configuration
<configuration scan="true" scanPeriod="2 seconds" debug="false">
</configuration>
configuration包含以下三個屬性:
- scan:配置文件發(fā)生更改時闷堡,進(jìn)行重載隘膘,默認(rèn)值為true
- scanPeriod:監(jiān)測配置文件是否有修改的時間間隔,默認(rèn)值為6000杠览,默認(rèn)單位為毫秒
- debug:打印logback內(nèi)部日志信息弯菊,實(shí)時查看logback運(yùn)行狀態(tài),默認(rèn)值為false
子節(jié)點(diǎn)property:
<property name="LOG_PATH" value="./logs" />
用來定義變量值踱阿,包含以下兩個屬性
- name:變量名稱
- value:變量定義的值
通過property
定義的值會被插入到logger
上下文中管钳,可以使${}
來使用變量钦铁,這里定義了log
的保存位置根目錄。
子節(jié)點(diǎn)appender:
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
</appender>
是負(fù)責(zé)寫日志的組件才漆,通過自定義日志組件控制日志輸出的情況牛曹,包含以下兩個屬性:
- name:組件名稱
- class:組件class指定的類名
不同的class,對應(yīng)不同的功能:
如ch.qos.logback.core.ConsoleAppender
會把日志輸出到控制臺
ch.qos.logback.core.rolling.RollingFileAppender
把日志內(nèi)容輸出到指定文件
File節(jié)點(diǎn):日志文件輸出的文件名
<File>${LOG_PATH}/info.log</File>
filter節(jié)點(diǎn):過濾器醇滥,用來指定日志組件的日志輸出級別黎比,優(yōu)先級高于root節(jié)點(diǎn)的level。
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
rollingPolicy節(jié)點(diǎn):
滾動日志文件配置鸳玩,涉及日志文件的移動和重命名阅虫,只有一個class
屬性,用來指定滾動策略不跟,這里使用的是ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy
包含以下三個屬性:
- fileNamePattern:發(fā)生滾動時的日志命名方式
- maxHistory:日志文件的最大保留時間颓帝,超過設(shè)定時間后會自動刪除
- maxFileSize:每份日志文件的最大限制,超出限制后會重新生成窝革,并將舊的日志文件按照fileNamePattern設(shè)定的日志命名方式進(jìn)行命名
<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>
子節(jié)點(diǎn)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>
對記錄事件進(jìn)行格式化躲履,負(fù)責(zé)兩件事,一是把日志信息轉(zhuǎn)換成字節(jié)數(shù)組聊闯,二是把字節(jié)數(shù)組寫入到輸出流工猜。
PatternLayoutEncoder 是唯一有用的且默認(rèn)的encoder ,有一個<pattern style="margin: 0px; padding: 0px;">節(jié)點(diǎn)菱蔬,用來設(shè)置日志的輸入格式篷帅。使用“%”加“轉(zhuǎn)換符”方式,如果要輸出“%”拴泌,則必須用“\”對“%”進(jìn)行轉(zhuǎn)義魏身。</pattern>
子節(jié)點(diǎn)root
根loger
,是所有loger
的最上級蚪腐,且只有一個level
節(jié)點(diǎn)箭昵,用類設(shè)置打印日志的級別,默認(rèn)值為debug
回季,通常設(shè)置為info
家制,此外還有trace、warn泡一、error颤殴、all、off
級別鼻忠。
子節(jié)點(diǎn)appender-ref的ref
屬性指定日志組件名稱涵但,即appender
的name
屬性值。
使用logback
在yml
文件中增加logging.config
指定配置文件地址,命名為logback時可以不需要配置矮瘟,
SpringBoot`會自動查找瞳脓。
level
設(shè)置指定路徑下的日志輸出級別。
logging:
config: classpath:logback.xml
level:
com:
springboot: debug
如圖所示澈侠,項目啟動后劫侧,訪問接口輸出日志內(nèi)容并生成指定日志文件: