SpringBoot整合Logback日志框架配置全解析
點擊上方藍色字體,選擇“標星公眾號”
優(yōu)質(zhì)文章,第一時間送達
? 作者?|??天喬巴夏丶
來源 |? urlify.cn/bY3aUf
本篇要點
介紹什么是Logback
介紹SpringBoot中對logging默認的配置
介紹自定義logback-spring.xml的注意點
一、Logback日志框架介紹
SpringBoot使用 Commons Logging 進行所有內(nèi)部日志的記錄,但默認配置也提供了對常用日志的支持,如 Java Util Logging,Log4J2,和Logback. 每種logger都可以通過配置使用控制臺或文件輸出日志內(nèi)容。
Logback是log4j框架的作者開發(fā)的新一代日志框架,它效率更高、能夠適應(yīng)諸多的運行環(huán)境,同時天然支持SLF4J。
二、SpringBoot與Logback
假設(shè)你使用starter啟動創(chuàng)建SpringBoot應(yīng)用,則默認已經(jīng)導(dǎo)入了spring-boot-starter-logging的依賴,相繼也就導(dǎo)入了logback所需要的依賴。

1、默認日志格式
于是,當我們啟動SpringBoot應(yīng)用時,控制臺將會顯示INFO級別的日志輸出。

可以看到,輸出內(nèi)容如下:
日期和時間,精確到毫秒級別。
日志級別:INFO,【日志級別默認從高到低:ERROR,WARN,INFO,DEBUG,TRACE】。
進程ID
分隔符:來標識實際日志消息的開始。
線程名:用方括號括起來(在控制臺輸出時可能被截斷)。
日志記錄器名稱:這通常是源類名稱(通常縮寫)。
日志信息
logback是沒有FATAL級別的,它對應(yīng)的就是ERROR。
2、控制臺輸出
默認的日志配置就是將日志信息顯示到控制臺,默認情況下,將會顯示INFO級別以上的日志信息。你還可以通過使用--debug標志啟動debug模式。?
$?java?-jar?myapp.jar?--debug
使用IDEA操作可以編輯Program arguments:--debug。
在application.properties中配置debug=true同樣也可以將日志級別調(diào)整到DEBUG。
3、文件輸出
默認情況下,SpringBoot的日志只會輸出到控制臺,如果你還想輸出到文件中,你需要配置logging.file.name和logging.file.path兩個屬性。
下面這個表格展示如何組合使用logging.*來達到理想的效果:
logging.file.name | logging.file.path | Example | Description |
|---|---|---|---|
| (none) | (none) | 只會輸出到控制臺 | |
| 指定文件 | (none) | my.log | 寫入指定的日志文件在當前項目目錄下 |
| (none) | 指定目錄 | log | 在當前項目下的log目錄,寫入spring.log文件 |
日志文件達到10 MB時會觸發(fā)滾動策略【切分】,默認情況下會記錄INFO以上級別的信息。可以使用logging.file.max-size屬性更改大小限制。除非已設(shè)置logging.file.max-history屬性,否則默認情況下將保留最近7天的輪轉(zhuǎn)日志文件。可以使用logging.file.total-size-cap限制日志歸檔文件的總大小。當日志歸檔的總大小超過該閾值時,將刪除備份。要在應(yīng)用程序啟動時強制清除日志存檔,請使用logging.file.clean-history-on-start屬性。
4、日志級別
可以使用logging.level設(shè)置所有受支持的日志記錄器的級別。
logging.level.root=warn
logging.level.org.springframework.web=debug
logging.level.org.hibernate=error
5、日志組
使用logging.group能夠?qū)⑾嚓P(guān)的logger組合在一起統(tǒng)一管理日志級別等配置。使用方法如下:
假設(shè)定義了group為tomcat:
logging.group.tomcat=org.apache.catalina,?org.apache.coyote,?org.apache.tomcat
一旦這樣定義之后,就可以僅僅通過一行配置,完成相關(guān)三個logger的級別配置:
logging.level.tomcat=TRACE
SpringBoot預(yù)定義了兩個開箱即用的日志組:
| Name | Loggers |
|---|---|
| web | org.springframework.core.codec,?org.springframework.http,?org.springframework.web,?org.springframework.boot.actuate.endpoint.web,?org.springframework.boot.web.servlet.ServletContextInitializerBeans |
| sql | org.springframework.jdbc.core,?org.hibernate.SQL,?org.jooq.tools.LoggerListener |
#?pre-defined
logging.level.web=debug
logging.level.sql=debug
6、自定義log配置
由于日志服務(wù)一般都在ApplicationContext創(chuàng)建前就初始化了,它并不是必須通過Spring的配置文件控制。因此通過系統(tǒng)屬性和傳統(tǒng)的Spring Boot外部配置文件依然可以很好的支持日志控制和管理。
你可以根據(jù)你的日志系統(tǒng),按照下面表格的定義規(guī)則,選擇定義對應(yīng)的日志配置:
| Logging System | Customization |
|---|---|
| Logback | logback-spring.xml,?logback-spring.groovy,?logback.xml, or?logback.groovy |
| Log4j2 | log4j2-spring.xml?or?log4j2.xml |
| JDK (Java Util Logging) | logging.properties |
SpringBoot官方推薦使用帶有-spring的文件名作為配置,如logback-spring.xml而不是logback.xml。
這樣命名的好處在于:因為標準的logback.xml配置文件加載得太早,所以不能在其中使用擴展,需要使用logback-spring.xml。
當然上面是默認的命名規(guī)則,如果你想自定義xml的名稱,自定義路徑,可以通過logging.config屬性配置:
logging.config=classpath:logging-config.xml
三、logback-spring.xml自定義注意事項
接下來分享一份配置十分詳細的logback.xml配置,參照注釋,應(yīng)該就能夠掌握xml的定義。
"1.0"?encoding="UTF-8"?>
"true"?scanPeriod="10?seconds"?debug="false">
????
????
????
????
????logback
????
????"log.path"?value="log"?/>
????"console_log_pattern"
??????????????value="%black(%contextName-)?%red(%d{yyyy-MM-dd?HH:mm:ss})?%green([%thread])?%highlight(%-5level)?%boldMagenta(%logger{36})?-?%gray(%msg%n)"/>
????"charset"?value="UTF-8"/>
????
????"console"?class="ch.qos.logback.core.ConsoleAppender">
????????
????????
?????????"ch.qos.logback.classic.filter.ThresholdFilter">
?????????????DEBUG
?????????
????????
????????????${console_log_pattern}
????????
????
????
????"info_file"?class="ch.qos.logback.core.rolling.RollingFileAppender">
????????"ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
????????????${log.path}/roll_info/logback.%d{yyyy-MM-dd}.log
????????
????????
????????????${console_log_pattern}
????????????${charset}
????????
????????
????????"ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
????????????
????????????${log.path}/info/log-info-%d{yyyy-MM-dd}.%i.log
????????????"ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
????????????????100MB
????????????
????????????
????????????15
????????
????????
????????"ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
????????????10MB
????????
????????
????????"ch.qos.logback.classic.filter.LevelFilter">
????????????INFO
????????????ACCEPT
????????????DENY
????????
????
????
????"warn_file"?class="ch.qos.logback.core.rolling.RollingFileAppender">
????
????
????"error_file"?class="ch.qos.logback.core.rolling.RollingFileAppender">
????
????
????"info">
????????"console"?/>
????????"info_file"?/>
????????"warn_file"/>
????????"error_file"/>
????
????
????
????"com.hyh.logback.web.LogTestController"?level="WARN"?additivity="false">
????????"console"/>
????????"warn_file"/>
????????"error_file"/>
????
????
????
????"dev">
????????
????????"com.hyh.logback.web"?level="DEBUG">
????????????"console"/>
????????
????????
????????"INFO">
????????????"console"/>
????????
????
最終的效果,會在項目路徑下生成日志文件:/log/info/log-info-2020-11-01.0.log,并且日志文件的策略也在xml中定義。
控制臺打印信息,如下圖所示:

配置文件下載
本文內(nèi)容均為對優(yōu)秀博客及官方文檔總結(jié)而得,原文地址均已在文中參考閱讀處標注。最后,文中的代碼及配置文件詳細樣例已經(jīng)全部上傳至Gitee:https://gitee.com/tqbx/springboot-samples-learn
參考閱讀
嘟嘟:默認日志logback配置解析
SpringBoot官方文檔:Log Format
Logback官方文檔
粉絲福利:實戰(zhàn)springboot+CAS單點登錄系統(tǒng)視頻教程免費領(lǐng)取
???
?長按上方微信二維碼?2 秒 即可獲取資料
感謝點贊支持下哈?
