SpringBoot中Logback日志配置解析本篇要點一担猛、Logback日志框架介紹二松蒜、SpringBoot與Logback1、默認日志格式2读串、控制臺輸出3聊记、文件輸出4、日志級別5恢暖、日志組6排监、自定義log配置三、logback-spring.xml自定義注意事項配置文件下載參考閱讀
SpringBoot中Logback日志配置解析
本篇要點
介紹什么是Logback
介紹SpringBoot中對logging默認的配置
介紹自定義logback-spring.xml的注意點
一杰捂、Logback日志框架介紹
SpringBoot使用 Commons Logging 進行所有內部日志的記錄舆床,但默認配置也提供了對常用日志的支持,如 Java Util Logging嫁佳,Log4J2挨队,和Logback. 每種logger都可以通過配置使用控制臺或文件輸出日志內容。
Logback是log4j框架的作者開發(fā)的新一代日志框架蒿往,它效率更高盛垦、能夠適應諸多的運行環(huán)境,同時天然支持SLF4J瓤漏。
二腾夯、SpringBoot與Logback
假設你使用starter啟動創(chuàng)建SpringBoot應用,則默認已經導入了spring-boot-starter-logging的依賴蔬充,相繼也就導入了logback所需要的依賴俯在。
1、默認日志格式
于是娃惯,當我們啟動SpringBoot應用時跷乐,控制臺將會顯示INFO級別的日志輸出。
可以看到趾浅,輸出內容如下:
日期和時間愕提,精確到毫秒級別。
日志級別:INFO皿哨,【日志級別默認從高到低:ERROR浅侨,WARN,INFO证膨,DEBUG如输,TRACE】。
進程ID
分隔符:來標識實際日志消息的開始。
線程名:用方括號括起來(在控制臺輸出時可能被截斷)不见。
日志記錄器名稱:這通常是源類名稱(通嘲幕縮寫)。
日志信息
logback是沒有FATAL級別的稳吮,它對應的就是ERROR缎谷。
2、控制臺輸出
默認的日志配置就是將日志信息顯示到控制臺灶似,默認情況下列林,將會顯示INFO級別以上的日志信息。你還可以通過使用--debug
標志啟動debug模式酪惭。
$ java -jar myapp.jar --debug
使用IDEA操作可以編輯Program arguments:--debug希痴。
在application.properties中配置debug=true同樣也可以將日志級別調整到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
屬性更改大小限制。 除非已設置logging.file.max-history
屬性谦秧,否則默認情況下將保留最近7天的輪轉日志文件竟纳。 可以使用logging.file.total-size-cap
限制日志歸檔文件的總大小。 當日志歸檔的總大小超過該閾值時疚鲤,將刪除備份锥累。 要在應用程序啟動時強制清除日志存檔,請使用logging.file.clean-history-on-start
屬性集歇。
4桶略、日志級別
可以使用logging.level設置所有受支持的日志記錄器的級別。
logging.level.root=warn
logging.level.org.springframework.web=debug
logging.level.org.hibernate=error
5诲宇、日志組
使用logging.group能夠將相關的logger組合在一起統(tǒng)一管理日志級別等配置际歼。使用方法如下:
假設定義了group為tomcat:
logging.group.tomcat=org.apache.catalina, org.apache.coyote, org.apache.tomcat
一旦這樣定義之后,就可以僅僅通過一行配置姑蓝,完成相關三個logger的級別配置:
logging.level.tomcat=TRACE
SpringBoot預定義了兩個開箱即用的日志組:
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配置
由于日志服務一般都在ApplicationContext創(chuàng)建前就初始化了,它并不是必須通過Spring的配置文件控制纺荧。因此通過系統(tǒng)屬性和傳統(tǒng)的Spring Boot外部配置文件依然可以很好的支持日志控制和管理旭愧。
你可以根據你的日志系統(tǒng)颅筋,按照下面表格的定義規(guī)則,選擇定義對應的日志配置:
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配置缎讼,參照注釋,應該就能夠掌握xml的定義坑匠。
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="10 seconds" debug="false">
<!-- 日志級別從低到高分為TRACE < DEBUG < INFO < WARN < ERROR < FATAL血崭,如果設置為WARN,則低于WARN的信息都不會輸出 -->
<!-- scan:當此屬性設置為true時厘灼,配置文件如果發(fā)生改變夹纫,將會被重新加載,默認值為true -->
<!-- scanPeriod:設置監(jiān)測配置文件是否有修改的時間間隔设凹,如果沒有給出時間單位舰讹,默認單位是毫秒。當scan為true時闪朱,此屬性生效月匣。默認的時間間隔為1分鐘。 -->
<!-- debug:當此屬性設置為true時奋姿,將打印出logback內部日志信息锄开,實時查看logback運行狀態(tài)。默認值為false称诗。 -->
<contextName>logback</contextName>
<!-- name的值是變量的名稱萍悴,value的值時變量定義的值。通過定義的值會被插入到logger上下文中寓免。定義變量后退腥,可以使“${}”來使用變量。 -->
<property name="log.path" value="log" />
<property name="console_log_pattern"
value="%black(%contextName-) %red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}) - %gray(%msg%n)"/>
<property name="charset" value="UTF-8"/>
<!--輸出到控制臺-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!--此日志appender是為開發(fā)使用再榄,只配置最底級別狡刘,控制臺輸出的日志級別是大于或等于此級別的日志信息-->
<!-- 例如:如果此處配置了INFO級別,則后面其他位置即使配置了DEBUG級別的日志困鸥,也不會被輸出 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>DEBUG</level>
</filter>
<encoder>
<pattern>${console_log_pattern}</pattern>
</encoder>
</appender>
<!--輸出到文件,只記錄INFO級別信息-->
<appender name="info_file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.path}/roll_info/logback.%d{yyyy-MM-dd}.log</fileNamePattern>
</rollingPolicy>
<encoder>
<pattern>${console_log_pattern}</pattern>
<charset>${charset}</charset>
</encoder>
<!-- 日志記錄器的滾動策略嗅蔬,按日期剑按,按大小記錄 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 每天日志歸檔路徑以及格式 -->
<fileNamePattern>${log.path}/info/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--日志文件保留天數-->
<maxHistory>15</maxHistory>
</rollingPolicy>
<!-- 如果超過10MB就刪除 -->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>10MB</maxFileSize>
</triggeringPolicy>
<!-- 此日志文件只記錄info級別的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!--輸出到文件,只記錄WARN級別信息-->
<appender name="warn_file" class="ch.qos.logback.core.rolling.RollingFileAppender">
</appender>
<!--輸出到文件,只記錄ERROR級別信息-->
<appender name="error_file" class="ch.qos.logback.core.rolling.RollingFileAppender">
</appender>
<!--
root節(jié)點是必選節(jié)點,用來指定最基礎的日志輸出級別澜术,只有一個level屬性
level:用來設置打印級別艺蝴,大小寫無關:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,默認是DEBUG
可以包含零個或多個appender元素鸟废。
-->
<root level="info">
<appender-ref ref="console" />
<appender-ref ref="info_file" />
<appender-ref ref="warn_file"/>
<appender-ref ref="error_file"/>
</root>
<!--
<logger>用來設置某一個包或者具體的某一個類的日志打印級別猜敢、以及指定<appender>。
<logger>僅有一個name屬性盒延,
一個可選的level和一個可選的additivity屬性缩擂。
name:用來指定受此logger約束的某一個包或者具體的某一個類。
level:用來設置打印級別添寺,大小寫無關:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF胯盯,
如果未設置此屬性,那么當前l(fā)ogger將會繼承上級的級別计露。
additivity:是否向上級logger傳遞打印信息,默認是true
-->
<!-- 使用mybatis的時候博脑,sql語句是debug下才會打印,而這里我們只配置了info票罐,所以想要查看sql語句的話叉趣,有以下兩種操作:
第一種把<root level="INFO">改成<root level="DEBUG">這樣就會打印sql,不過這樣日志那邊會出現很多其他消息
第二種就是單獨給mapper下目錄配置DEBUG模式该押,代碼如下疗杉,這樣配置sql語句會打印,其他還是正常DEBUG級別:
-->
<logger name="com.hyh.logback.web.LogTestController" level="WARN" additivity="false">
<appender-ref ref="console"/>
<appender-ref ref="warn_file"/>
<appender-ref ref="error_file"/>
</logger>
<!-- 如果多環(huán)境開發(fā)可以用springProfile -->
<!--開發(fā)環(huán)境:打印控制臺-->
<springProfile name="dev">
<!--可以輸出項目中的debug日志沈善,包括mybatis的sql日志-->
<logger name="com.hyh.logback.web" level="DEBUG">
<appender-ref ref="console"/>
</logger>
<!--
root節(jié)點是必選節(jié)點乡数,用來指定最基礎的日志輸出級別,只有一個level屬性
level:用來設置打印級別闻牡,大小寫無關:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF净赴,默認是DEBUG
可以包含零個或多個appender元素。
-->
<root level="INFO">
<appender-ref ref="console"/>
</root>
</springProfile>
</configuration>
最終的效果罩润,會在項目路徑下生成日志文件:/log/info/log-info-2020-11-01.0.log
玖翅,并且日志文件的策略也在xml中定義。
控制臺打印信息割以,如下圖所示:
配置文件下載
本文內容均為對優(yōu)秀博客及官方文檔總結而得金度,原文地址均已在文中參考閱讀處標注。最后严沥,文中的代碼及配置文件詳細樣例已經全部上傳至Gitee:https://gitee.com/tqbx/springboot-samples-learn