三:SpringBoot 的日誌介紹及相關配置
Spring Boot
內部採用的是Commons Logging
進行日誌記錄,但是也為Java Util Logging
、Logback、
Log4J2
等日誌框架提供了預設配置 。Java 雖然有很多可用的日誌框架,但一般來說,使用SpringBoot
預設的Logback
就完全可以了。
1. 日誌格式
大概就是下面這種:
2019-01-08 13:37:20.866 INFO 9092 --- [ main] com.wzp.DemoApplication : Starting DemoApplication on Boran-35 with PID 9092 (E:\java\demo\target\classes started by zp.wei in E:\java\demo) 2019-01-08 13:37:20.868 INFO 9092 --- [ main] com.wzp.DemoApplication : No active profile set, falling back to default profiles: default 2019-01-08 13:37:22.523 INFO 9092 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) 2019-01-08 13:37:22.566 INFO 9092 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2019-01-08 13:37:22.567 INFO 9092 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/9.0.13 2019-01-08 13:37:22.575 INFO 9092 --- [ main] o.a.catalina.core.AprLifecycleListener : The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [D:\Java\jdk1.8.0_172\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;D:\Java\jdk1.8.0_172\bin;D:\gradle-4.8.1\bin;D:\Git\cmd;D:\nodejs\;C:\Users\zp.wei\AppData\Roaming\npm;D:\gradle-4.8.1\bin;.] 2019-01-08 13:37:22.683 INFO 9092 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2019-01-08 13:37:22.684 INFO 9092 --- [ main] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 1755 ms 2019-01-08 13:37:23.008 INFO 9092 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor' 2019-01-08 13:37:23.282 INFO 9092 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' 2019-01-08 13:37:23.285 INFO 9092 --- [ main] com.wzp.DemoApplication : Started DemoApplication in 2.93 seconds (JVM running for 3.905)
- 時間日期:精確到毫秒,可以用於排序(例:2019-01-08 13:37:20.868)
- 日誌級別:ERROR、WARN、INFO、DEBUG、TRACE(例:INFO)
- 程序ID(例:9092)
- 分隔符:採用
---
來標識日誌開始部分(例:---
)- 執行緒名:方括號括起來(可能會截斷控制檯輸出)(例:[ main])
- Logger名:通常使用原始碼的類名(例:com.wzp.DemoApplication)
- 日誌內容:我們輸出的訊息(例:No active profile set, falling back to default profiles: default)
2. 日誌輸出
SpringBoot
預設為我們輸出的日誌級別為INFO
、WARN
、ERROR
(logback
沒有FATAL
級別的日誌,它將被對映到ERROR
),如需要輸出更多日誌的時候,可以通過以下方式去開啟
- 命令模式配置:
java -jar app.jar --debug=true
, 這種命令會被SpringBoot
解析,且優先順序最高- 資原始檔配置:
application.properties
配置debug=true
即可。該配置只對 嵌入式容器、Spring、Hibernate生效,自己的專案想要輸出DEBUG
需要額外配置
# 日誌輸出級別的配置
logging.level.root = WARN
logging.level.org.springframework.web = DEBUG
logging.level.org.hibernate = ERROR
2.1. 日誌輸出格式配置
logging.pattern.console:定義輸出到控制檯的格式(不支援JDK Logger)
logging.pattern.file:定義輸出到檔案的格式(不支援JDK Logger)
上面的一般寫在 application.properties 配置檔案裡,下面這種一般這種寫在 logback.xml
檔案中
<!-- 檔案輸出格式 -->
<property name="PATTERN" value="%-12(%d{yyyy-MM-dd HH:mm:ss.SSS}) |-%-5level [%thread] %c [%L] -| %msg%n"/>
<!-- prod檔案路徑 -->
<property name="PROD_FILE_PATH" value="/data/wzp/logs"/>
3. 日誌檔案儲存
SpringBoot
僅將日誌輸出到控制檯,不會寫入到日誌檔案中去。如果除了控制檯輸出之外還想寫日誌檔案,則需要在application.properties
設定logging.path
或logging.file
屬性
- logging.path:將名為
spring.log
寫入到指定的資料夾中,如(/date/logs
)- logging.file:將日誌寫入到指定的檔案中,預設為相對路徑,當然了,我們也可以設定成絕對路徑
日誌檔案在達到
xxMB
時進行切割,產生一個新的日誌檔案(如:spring-1.log、spring-2.log
...),新的日誌依舊輸出到spring.log
中去,預設情況下會記錄ERROR
、WARN
、INFO
級別訊息。
- logging.file.max-size:設定日誌檔案大小
- logging.file.max-history:設定日誌保留天數
4. 日誌擴充套件配置
在這裡我們用 logback 進行舉例,而且該擴充套件配置僅適用
logback-spring.xml
或者設定logging.config
屬性的檔案,因為logback.xml
檔案載入過早,它無法獲取SpringBoot
的擴充套件屬性...使用
springProfile
或者springProperty
讓你的logback-spring.xml
配置更簡單和清晰(在這裡,我就只寫springProfile
這個了,springProperty
也簡單,相信你們自己都會的
...)
<!-- 開發環境時啟用 -->
<springProfile name="dev">
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${PATTERN}</pattern>
</encoder>
</appender>
<logger name="com.roncoo.education" level="debug"/>
<root level="info">
<appender-ref ref="CONSOLE"/>
</root>
</springProfile>
<!-- 測試環境時啟用-->
<springProfile name="test">
</springProfile>
<!-- 生產環境時啟用-->
<springProfile name="prod">
</springProfile>
5. 結語
按照慣例寫個結語,嗯...看了很多大佬的教程,結合我自己的總結了一波,當然了,不足之處請多包涵,也請多指教...如有雷同,也請多包涵...嘻嘻...
注:如有需要,可自行轉載,但是要加上原創作者及原文章連結哦...