1. 程式人生 > >三:SpringBoot 的日誌介紹及相關配置

三:SpringBoot 的日誌介紹及相關配置

Spring Boot內部採用的是 Commons Logging 進行日誌記錄,但是也為 Java Util LoggingLogback、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)
  1. 時間日期:精確到毫秒,可以用於排序(例:2019-01-08 13:37:20.868)
  2. 日誌級別:ERROR、WARN、INFO、DEBUG、TRACE(例:INFO)
  3. 程序ID(例:9092)
  4. 分隔符:採用---來標識日誌開始部分(例:---
  5. 執行緒名:方括號括起來(可能會截斷控制檯輸出)(例:[  main])
  6. Logger名:通常使用原始碼的類名(例:com.wzp.DemoApplication)
  7. 日誌內容:我們輸出的訊息(例:No active profile set, falling back to default profiles: default)

2. 日誌輸出

SpringBoot預設為我們輸出的日誌級別為INFOWARNERRORlogback 沒有FATAL級別的日誌,它將被對映到ERROR),如需要輸出更多日誌的時候,可以通過以下方式去開啟

  1. 命令模式配置:java -jar app.jar --debug=true, 這種命令會被SpringBoot解析,且優先順序最高
  2. 資原始檔配置: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 屬性

  1. logging.path:將名為 spring.log 寫入到指定的資料夾中,如(/date/logs
  2. logging.file:將日誌寫入到指定的檔案中,預設為相對路徑,當然了,我們也可以設定成絕對路徑

日誌檔案在達到 xxMB時進行切割,產生一個新的日誌檔案(如:spring-1.log、spring-2.log ...),新的日誌依舊輸出到spring.log中去,預設情況下會記錄ERRORWARNINFO級別訊息。

  1. logging.file.max-size:設定日誌檔案大小
  2. 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. 結語

按照慣例寫個結語,嗯...看了很多大佬的教程,結合我自己的總結了一波,當然了,不足之處請多包涵,也請多指教...如有雷同,也請多包涵...嘻嘻...

注:如有需要,可自行轉載,但是要加上原創作者及原文章連結哦...