SpringBoot專案整合日誌

讓蛋蛋飛發表於2019-02-12

SpringBoot使用Commons Logging進行所有內部日誌記錄,但保留底層日誌實現。預設提供了Java Util LoggingLog4j2Logback日誌配置。在每種情況下,都預先配置為使用控制檯輸出,並且還提供了可選的檔案輸出。(來自官網)

SpringBoot預設提供的三種日誌配置實現

日誌格式

SpringBoot預設的日誌輸出如下所示:

2014-03-05 10:57:51.112  INFO 45469 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/7.0.52
2014-03-05 10:57:51.253  INFO 45469 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2014-03-05 10:57:51.253  INFO 45469 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1358 ms
2014-03-05 10:57:51.698  INFO 45469 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean        : Mapping servlet: 'dispatcherServlet' to [/]
2014-03-05 10:57:51.702  INFO 45469 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
複製程式碼

輸出以下專案:

  • 日期和時間:毫秒精度並且容易排序
  • 日誌級別:ERROR, WARN, INFO, DEBUG, TRACE
  • 程式ID
  • --- 分隔符來區分實際日誌的開始
  • 執行緒名:括在方括號中(可能會被截斷)
  • 日誌記錄器名:這通常是源類名(通常縮寫)
  • 日誌資訊

Logback中沒有FATAL(致命)級別,它被對映到ERROR級別

日誌格式來自官網

控制檯輸出

SpringBoot控制檯輸出預設支援三種日誌級別:ERROR,WARN和INFO

如果還想輸出別的級別日誌,例如DEBUG或TRACE(只能二選一),如下操作:

  • 啟動應用程式時,增加--debug或--trace標誌
    $ java -jar myapp.jar -- debug
    
    說明:使用debug除錯模式啟動應用程式不會將應用程式配置為使用DEBUG級別記錄日誌。
    複製程式碼
  • 在application.yml中(或application.properties中)增加debug: true或trace: true(或debug=true/trace=true)

    application.yml檔案:

    debug: true
    複製程式碼

    application.properties檔案:

    debug=true
    複製程式碼

多彩輸出:

如果終端支援ANSI(表示顏色),可以設定彩色輸出。

application.yml中設定:

# 檢查終端是否支援ANSI,是的話就採用彩色輸出
spring:
  output:
    ansi:
      enabled: detect
複製程式碼

application.properties中設定:

# 檢查終端是否支援ANSI,是的話就採用彩色輸出
spring.output.ansi.enabled=detect
複製程式碼

檔案輸出

SpringBoot預設配置日誌只會輸出到控制檯,並不會記錄到檔案中,但通常生產環境需要把日誌記錄到檔案中。

配置屬性如下:

  • logging.file: 設定日誌輸出檔案,絕對路徑或相對路徑都可以。
  • logging.path: 設定日誌輸出目錄,會在該目錄下建立spring.log檔案,並寫入日誌內容。

日誌檔案在達到10 MB時滾動輸出,並且與控制檯輸出一樣,預設情況下會記錄ERROR,WARN和INFO級別的日誌。可以使用logging.file.max-size屬性更改大小限制。除非已設定logging.file.max-history屬性,否則以前輪換的日誌檔案將被無限期歸檔。(來自官網)

注意點:

  1. 日誌記錄系統在應用程式生命週期的早期初始化。因此,在通過@PropertySource註解載入的屬性檔案中找不到日誌記錄屬性。
  2. 日誌記錄屬性獨立於實際的日誌記錄基礎結構。因此,SpringBoot不管理特定的配置金鑰(例如Logback的logback.configurationFile)。 (來自官網)

application.yml中設定:

logging:
  # 設定相對路徑的日誌輸出檔案
  file: log/my.log
  # 設定日誌輸出路徑,預設會生成log/spring.log日誌檔案
  path: log
  
logging:
  # 設定絕對路徑的日誌輸出檔案
  file: D:\ideaProjects\SpringBootDemo\log1\mylog1.log
  # 設定日誌輸出路徑,預設會生成log/spring.log日誌檔案
  path: log
複製程式碼

application.properties中設定:

logging.file=log/my.log
logging.path=log
複製程式碼

日誌檔案輸出

級別控制

配置屬性格式:logging.level.*=LEVEL

  • logging.level: 日誌級別控制字首,*為包名或Logger名
  • LEVEL: 選項TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF

application.yml中設定:

logging:
  level:
    # com.example.demo包下所有class以DEBUG級別輸出
    com.example.demo: DEBUG
    # root日誌以INFO級別輸出
    root: INFO
    
說明:
配置日誌級別值大小寫均可,例如:設定成debug/info    
複製程式碼

application.properties中設定:

logging.level.com.example.demo=DEBUG
logging.level.root=INFO

說明:
配置日誌級別值大小寫均可,例如:設定成debug/info
複製程式碼

刨根問底,死磕自己(選看)

1. 日誌級別設定選項

原始碼中系統日誌級別是個列舉類,列出了所有日誌級別,如下截圖:

日誌級別

根據在application.yml中設定的LEVEL值,匹配系統日誌列舉類,最終設定系統相應包下的日誌級別。

配置值匹配系統日誌列舉類

SpringBoot官網: docs.spring.io/spring-boot…

相關文章