SpringBoot
是為了簡化Spring
應用的創建、運行、調試、部署等一系列問題而誕生的產物,自動裝配的特性讓我們可以更好的關注業務本身而不是外部的XML配置,我們只需遵循規范,引入相關的依賴就可以輕易的搭建出一個 WEB 工程
Spring Boot
內部采用的是 Commons Logging
進行日志記錄,但在底層為 Java Util Logging
、Log4J2
、Logback
等日志框架提供了默認配置 。
Java 雖然有很多可用的日志框架,但請不要擔心,一般來說,使用
SpringBoot
默認的Logback
就可以了。
日志格式
SpringBoot
的默認輸出的日志格式如下:
1 |
2014-03-05 10:57:51.112 INFO 45469 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/7.0.52 |
輸出如下元素:
Logback
是沒有 FATAL
級別的日志,它將被映射到 ERROR
- 時間日期:精確到毫秒,可以用於排序
- 日志級別:ERROR、WARN、INFO、DEBUG、TRACE
- 進程ID
- 分隔符:采用
---
來標識日志開始部分 - 線程名:方括號括起來(可能會截斷控制台輸出)
- Logger名:通常使用源代碼的類名
- 日志內容:我們輸出的消息
日志輸出
SpringBoot
默認為我們輸出的日志級別為 INFO
、WARN
、ERROR
,如需要輸出更多日志的時候,可以通過以下方式開啟
- 命令模式配置:
java -jar app.jar --debug=true
, 這種命令會被SpringBoot
解析,且優先級最高 - 資源文件配置:
application.properties
配置debug=true
即可。該配置只對 嵌入式容器、Spring、Hibernate生效,我們自己的項目想要輸出DEBUG
需要額外配置(配置規則:logging.level.<logger-name>=<level>
)
日志輸出級別配置
1 |
logging.level.root = WARN |
日志輸出格式配置
- logging.pattern.console: 定義輸出到控制台的格式(不支持JDK Logger)
- logging.pattern.file: 定義輸出到文件的格式(不支持JDK Logger)
顏色編碼
如果終端支持 ANSI
,默認情況下會給日志上個色,提高可讀性,可以在配置文件中設置 spring.output.ansi.enabled
來改變默認值
- ALWAYS: 啟用
ANSI
顏色的輸出。 - DETECT: 嘗試檢測
ANSI
着色功能是否可用。 - NEVER: 禁用
ANSI
顏色的輸出。
編碼對照表
Level | Color |
---|---|
WARN |
Yellow |
FATAL 、ERROR |
Red |
INFO 、DEBUG 、TRACE |
Green |
如果想修改日志默認色值,可以通過使用 %clr
關鍵字轉換。比如想使文本變為黃色 %clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){yellow}
。目前支持的顏色有(blue
、cyan
、faint
、green
、magenta
、red
、yellow
)
文件保存
默認情況下,SpringBoot
僅將日志輸出到控制台,不會寫入到日志文件中去。如果除了控制台輸出之外還想寫日志文件,則需要在application.properties
設置logging.file
或 logging.path
屬性。
- logging.file: 將日志寫入到指定的 文件 中,默認為相對路徑,可以設置成絕對路徑
- logging.path: 將名為
spring.log
寫入到指定的 文件夾 中,如(/var/log
)
日志文件在達到 10MB
時進行切割,產生一個新的日志文件(如:spring.1.log、spring.2.log
),新的日志依舊輸出到 spring.log
中去,默認情況下會記錄 ERROR
、WARN
、INFO
級別消息。
- logging.file.max-size: 限制日志文件大小
- logging.file.max-history: 限制日志保留天數
自定義日志配置
由於日志在 ApplicationContext
之前就初始化好了,所以 SpringBoot
為我們提供了 logging.config
屬性,方便我們配置自定義日志文件。默認情況它會根據日志的依賴自動加載。
Logging System | Customization |
---|---|
JDK (Java Util Logging) |
logging.properties |
Log4j2 、ERROR |
log4j2-spring.xml 或 log4j2.xml |
Logback |
logback-spring.xml、logback-spring.groovy、logback.xml、logback.groovy |
Logback擴展配置
該擴展配置僅適用 logback-spring.xml
或者設置 logging.config
屬性的文件,因為 logback.xml
加載過早,因此無法獲取 SpringBoot
的一些擴展屬性
使用擴展屬性 springProfile
與 springProperty
讓你的 logback-spring.xml
配置顯得更有逼格,當別人還在苦苦掙扎弄logback-{profile}.xml的時候 你一個文件就搞定了…
springProfile
<springProfile>
標簽使我們讓配置文件更加靈活,它可以選擇性的包含或排除部分配置。
1 |
<springProfile name="dev"> |
案例
1 |
<!-- 開發環境日志級別為DEBUG/並且開發環境不寫日志文件 --> |
springProperty
<springProperty>
標簽可以讓我們在 Logback 中使用 Spring Environment 中的屬性。如果想在logback-spring.xml
中回讀 application.properties
配置的值時,這是一個非常好的解決方案
1 |
<!-- 讀取 spring.application.name 屬性來生成日志文件名 |