SpringBoot日志進階實戰(zhàn)之Logback配置經(jīng)驗和方法
前言
在上一篇文章中,我和你介紹了SpringBoot快速入門Slf4j + Logback實戰(zhàn),遺留的問題是如何將日志輸出到文件。
今天這篇文章分享了我在SpringBoot中使用Logback配置日志的經(jīng)驗和方法,并提供了詳細的代碼示例和解釋,包括:滾動文件、異步日志記錄、動態(tài)指定屬性、日志級別、配置文件等常用功能,覆蓋日常Logback配置開發(fā)90%的知識點!
一、Logback入門級配置
在tg-book-web的src\main\resources下創(chuàng)建logback-spring.xml文件,這里給出最簡單的輸出到控制臺
和文件
的示例
<?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- 定義屬性,可以通過“${}”來使用屬性 --> <property name="LOG_PATH" value="d:/logs/"/> <property name="APP_ID" value="tg-book"/> <!-- 把日志輸出到控制臺 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%level] [%thread] %logger{36} %L - %msg%xEx%n</pattern> </encoder> </appender> <!-- 把日志輸出到文件 --> <appender name="FILE" class="ch.qos.logback.core.FileAppender"> <encoder> <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%level] [%thread] %logger{36} %L - %msg%xEx%n</pattern> <charset>UTF-8</charset> </encoder> <file>${LOG_PATH}/${APP_ID}.log</file> </appender> <!-- 大于等于info級別的才會輸出 --> <root level="info"> <appender-ref ref="STDOUT"/> <appender-ref ref="FILE"/> </root> </configuration>
上面的配置,將輸出日志到文件d:/logs/tg-book.log中。
常用節(jié)點的解釋:
- configuration:根節(jié)點,包含所有配置信息。
- property:定義屬性,可以通過“${}”來使用屬性
- appender:定義輸出器的名稱、類型、編碼、日志輸出路徑等信息。
- class=“ch.qos.logback.core.ConsoleAppender”:輸出到控制臺
- class=“ch.qos.logback.core.FileAppender”:輸出到文件
- root:定義日志記錄器的根節(jié)點,指定默認的日志記錄級別、輸出器等信息。
二、動態(tài)指定屬性
定義springProperty標(biāo)簽,通過指定source來源于application.properties的配置值!
- 修改上面的
logback-spring.xml
文件,僅將property 標(biāo)簽注釋,新增springProperty
標(biāo)簽,如下:
<!--<property name="LOG_PATH" value="d:/logs/"/> <property name="APP_ID" value="tg-book"/>--> <springProperty name="LOG_PATH" source="log.path"/> <springProperty name="APP_ID" source="app.id"/>
- 修改
application.properties
文件,新增log.path和app.id配置:
app.id=tg-book log.path=d:/logs/
三、動態(tài)指定日志級別
可以在application.properties文件中設(shè)置logging.level.包路徑=日志級別
來更改日志級別!
- 例如,修改包org.tg.book.dal.mapper的日志級別=debug
logging.level.org.tg.book.dal.mapper = debug
此時,我們調(diào)用login接口,將輸出debug級別的mybatis的sql日志,如下圖:
也可以修改root的日志級別
logging.level.root= warn
此時,所有包,將只輸出warn、error級別日志。
四、指定配置文件
可以在application.properties文件中設(shè)置logging.config=classpath:logback-spring-2.xml
來指定配置文件,如果不指定默認就是classpath:logback-spring.xml!
五、滾動記錄RollingFIleAppender
RollingFileAppender:滾動記錄文件,先將日志記錄到指定文件,當(dāng)符合某個策略條件時,將日志記錄到其余文件。
我們新增一個RollingFileAppender,并修改root的appender-ref,詳細如下:
<!-- 把日志滾動輸出到各文件 --> <appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <encoder> <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%level] [%thread] %logger{36} %L - %msg%xEx%n</pattern> <charset>UTF-8</charset> </encoder> <file>${LOG_PATH}/${APP_ID}-rolling.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>${LOG_PATH}/${APP_ID}-%d{yyyyMMdd}-%i.log</fileNamePattern> <maxFileSize>100MB</maxFileSize> <!-- 文件最大大小,可能會超出 --> <maxHistory>30</maxHistory> <!-- 保存30天 --> <totalSizeCap>10GB</totalSizeCap><!-- 總?cè)罩敬笮?--> </rollingPolicy> </appender> <root level="info"> <appender-ref ref="STDOUT"/> <appender-ref ref="ROLLING_FILE"/> </root>
SizeAndTimeBasedRollingPolicy是常用的滾動策略,配置節(jié)點說明如下:
- maxFileSize:當(dāng)D:\logs\tg-book-rolling.log文件達到100MB以后,會自動創(chuàng)建新文件!測試時,你可以指定maxFileSize小一點,比如100KB。
- maxHistory:最大保存多長時間,單位是天
- totalSizeCap:總?cè)罩敬笮?/li>
六、異步記錄AsyncAppender
AsyncAppender可以將日志消息異步地發(fā)送到目標(biāo)Appender,以提高應(yīng)用程序的性能和響應(yīng)速度。
我們新增兩個AsyncAppender,一個指定控制臺,一個指定文件,如下:
<!-- 把日志異步輸出到控制臺 --> <appender name="ASYNC-STDOUT" class="ch.qos.logback.classic.AsyncAppender"> <!-- 指定隊列滿載時,消息將被丟棄的數(shù)量, 默認值為0 --> <discardingThreshold>0</discardingThreshold> <!-- 隊列的大小, 默認值為256 --> <queueSize>1024</queueSize> <!-- 隊列滿了不阻塞調(diào)用者--> <neverBlock>true</neverBlock> <!-- 異步打印堆棧信息不丟失--> <includeCallerData>true</includeCallerData> <!-- 添加附加的appender,最多只能添加一個 --> <appender-ref ref="STDOUT"/> </appender> <!-- 把日志異步滾動輸出到文件 --> <appender name="ASYNC-FILE" class="ch.qos.logback.classic.AsyncAppender"> <!-- 指定隊列滿載時,消息將被丟棄的數(shù)量, 默認值為0 --> <discardingThreshold>0</discardingThreshold> <!-- 隊列的大小, 默認值為256 --> <queueSize>1024</queueSize> <!-- 隊列滿了不阻塞調(diào)用者--> <neverBlock>true</neverBlock> <!-- 異步打印堆棧信息不丟失--> <includeCallerData>true</includeCallerData> <!-- 添加附加的appender,最多只能添加一個 --> <appender-ref ref="ROLLING_FILE"/> </appender> <!-- 大于等于info級別的才會輸出 --> <root level="info"> <!--<appender-ref ref="STDOUT"/> <appender-ref ref="ROLLING_FILE"/>--> <appender-ref ref="ASYNC-STDOUT"/> <appender-ref ref="ASYNC-FILE"/> </root>
AsyncAppender具有以下參數(shù):
- QueueSize:指定用于暫存消息的BlockingQueue隊列的大小。默認值為256。
- DiscardingThreshold:指定隊列滿載時,消息將被丟棄的數(shù)量。默認值為0。
- NeverBlock:指定當(dāng)隊列已滿時,是否阻止應(yīng)用程序運行。如果設(shè)置為true,當(dāng)隊列已滿時,應(yīng)用程序?qū)⒗^續(xù)運行,但消息可能會丟失。默認值為false。
- IncludeCallerData:指定是否在記錄器中包含調(diào)用者信息。默認值為false。
- AppenderRef:指定一個或多個目標(biāo)Appender引用的列表。每個引用都必須引用一個已定義的Appender。
- DiscardingThresholdPolicyClassName:指定當(dāng)隊列滿時,應(yīng)采取的策略類的名稱。默認使用的是DiscardingThresholdPolicy類。
- QueueFullPolicyClassName:指定當(dāng)隊列已滿時,應(yīng)采取的策略類的名稱。默認使用的是DiscardingQueueFullPolicy類。
總結(jié)
最終的logback-spring.xml
配置文件如下:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- 定義屬性,可以通過“${}”來使用屬性 --> <!--<property name="LOG_PATH" value="d:/logs/"/> <property name="APP_ID" value="tg-book"/>--> <springProperty name="LOG_PATH" source="log.path"/> <springProperty name="APP_ID" source="app.id"/> <!-- 把日志輸出到控制臺 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%level] [%thread] %logger{36} %L - %msg%xEx%n</pattern> </encoder> </appender> <!-- 把日志輸出到文件 --> <appender name="FILE" class="ch.qos.logback.core.FileAppender"> <encoder> <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%level] [%thread] %logger{36} %L - %msg%xEx%n</pattern> <charset>UTF-8</charset> </encoder> <file>${LOG_PATH}/${APP_ID}.log</file> </appender> <!-- 把日志滾動輸出到各文件 --> <appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <encoder> <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%level] [%thread] %logger{36} %L - %msg%xEx%n</pattern> <charset>UTF-8</charset> </encoder> <file>${LOG_PATH}/${APP_ID}-rolling.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>${LOG_PATH}/${APP_ID}-%d{yyyyMMdd}-%i.log</fileNamePattern> <maxFileSize>500KB</maxFileSize> <!-- 文件最大大小,可能會超出 --> <maxHistory>30</maxHistory> <!-- 保存30天 --> <totalSizeCap>10GB</totalSizeCap><!-- 總?cè)罩敬笮?--> </rollingPolicy> </appender> <!-- 把日志異步輸出到控制臺 --> <appender name="ASYNC-STDOUT" class="ch.qos.logback.classic.AsyncAppender"> <!-- 指定隊列滿載時,消息將被丟棄的數(shù)量, 默認值為0 --> <discardingThreshold>0</discardingThreshold> <!-- 隊列的大小, 默認值為256 --> <queueSize>1024</queueSize> <!-- 隊列滿了不阻塞調(diào)用者--> <neverBlock>true</neverBlock> <!-- 異步打印堆棧信息不丟失--> <includeCallerData>true</includeCallerData> <!-- 添加附加的appender,最多只能添加一個 --> <appender-ref ref="STDOUT"/> </appender> <!-- 把日志異步滾動輸出到文件 --> <appender name="ASYNC-FILE" class="ch.qos.logback.classic.AsyncAppender"> <!-- 指定隊列滿載時,消息將被丟棄的數(shù)量, 默認值為0 --> <discardingThreshold>0</discardingThreshold> <!-- 隊列的大小, 默認值為256 --> <queueSize>1024</queueSize> <!-- 隊列滿了不阻塞調(diào)用者--> <neverBlock>true</neverBlock> <!-- 異步打印堆棧信息不丟失--> <includeCallerData>true</includeCallerData> <!-- 添加附加的appender,最多只能添加一個 --> <appender-ref ref="ROLLING_FILE"/> </appender> <!-- 大于等于info級別的才會輸出 --> <root level="info"> <!--<appender-ref ref="STDOUT"/> <appender-ref ref="ROLLING_FILE"/>--> <appender-ref ref="ASYNC-STDOUT"/> <appender-ref ref="ASYNC-FILE"/> </root> </configuration>
application.properties
增加配置:
#logging.config=classpath:logback-spring.xml app.id=tg-book log.path=d:/logs/ logging.level.root = info #logging.level.org.tg.book.dal.mapper = debug
到此這篇關(guān)于SpringBoot日志進階實戰(zhàn) Logback配置詳解的文章就介紹到這了,更多相關(guān)SpringBoot Logback配置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用Swagger2實現(xiàn)自動生成RESTful?API文檔
在開發(fā)?RESTful?API?的過程中,文檔是非常重要的一部分,可以幫助開發(fā)者了解?API?的功能和使用方法,本文將使用Swagger2?實現(xiàn)自動生成?RESTful?API?文檔,需要的可以參考一下2023-06-06老生常談JVM的內(nèi)存溢出說明及參數(shù)調(diào)整
下面小編就為大家?guī)硪黄仙U凧VM的內(nèi)存溢出說明及參數(shù)調(diào)整。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-03-03Java編程中使用XFire框架調(diào)用WebService程序接口
這篇文章主要介紹了Java編程中使用XFire調(diào)用WebService程序接口的方法,WebService是一種跨編程語言和跨操作系統(tǒng)平臺的遠程調(diào)用技術(shù),需要的朋友可以參考下2015-12-12SpringBoot整合SpringSecurityOauth2實現(xiàn)鑒權(quán)動態(tài)權(quán)限問題
這篇文章主要介紹了SpringBoot整合SpringSecurityOauth2實現(xiàn)鑒權(quán)-動態(tài)權(quán)限,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-06-06