SpringBoot日志配置


SpringBoot 是為了簡化 Spring 應用的創建、運行、調試、部署等一系列問題而誕生的產物,自動裝配的特性讓我們可以更好的關注業務本身而不是外部的XML配置,我們只需遵循規范,引入相關的依賴就可以輕易的搭建出一個 WEB 工程

Spring Boot 內部采用的是 Commons Logging進行日志記錄,但在底層為 Java Util LoggingLog4J2Logback 等日志框架提供了默認配置 。

Java 雖然有很多可用的日志框架,但請不要擔心,一般來說,使用 SpringBoot 默認的 Logback 就可以了。

日志格式

SpringBoot 的默認輸出的日志格式如下:

1
2
3
4
5
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: [/*]

輸出如下元素:

Logback 是沒有 FATAL級別的日志,它將被映射到 ERROR

  • 時間日期:精確到毫秒,可以用於排序
  • 日志級別:ERROR、WARN、INFO、DEBUG、TRACE
  • 進程ID
  • 分隔符:采用 --- 來標識日志開始部分
  • 線程名:方括號括起來(可能會截斷控制台輸出)
  • Logger名:通常使用源代碼的類名
  • 日志內容:我們輸出的消息

日志輸出

SpringBoot 默認為我們輸出的日志級別為 INFOWARNERROR,如需要輸出更多日志的時候,可以通過以下方式開啟

  • 命令模式配置: java -jar app.jar --debug=true , 這種命令會被 SpringBoot 解析,且優先級最高
  • 資源文件配置: application.properties 配置 debug=true 即可。該配置只對 嵌入式容器、Spring、Hibernate生效,我們自己的項目想要輸出 DEBUG 需要額外配置(配置規則:logging.level.<logger-name>=<level>

日志輸出級別配置

1
2
3
4
5
6
7
logging.level.root = WARN
logging.level.org.springframework.web = DEBUG
logging.level.org.hibernate = ERROR

#比如 mybatis sql日志
logging.level.org.mybatis = INFO
logging.level.mapper所在的包 = DEBUG

日志輸出格式配置

  • 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
FATALERROR Red
INFODEBUGTRACE Green

如果想修改日志默認色值,可以通過使用 %clr 關鍵字轉換。比如想使文本變為黃色 %clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){yellow}。目前支持的顏色有(bluecyanfaintgreenmagentaredyellow

文件保存

默認情況下,SpringBoot 僅將日志輸出到控制台,不會寫入到日志文件中去。如果除了控制台輸出之外還想寫日志文件,則需要在application.properties 設置logging.file 或 logging.path 屬性。

  • logging.file: 將日志寫入到指定的 文件 中,默認為相對路徑,可以設置成絕對路徑
  • logging.path: 將名為 spring.log 寫入到指定的 文件夾 中,如(/var/log

日志文件在達到 10MB 時進行切割,產生一個新的日志文件(如:spring.1.log、spring.2.log),新的日志依舊輸出到 spring.log 中去,默認情況下會記錄 ERRORWARNINFO 級別消息。

  • logging.file.max-size: 限制日志文件大小
  • logging.file.max-history: 限制日志保留天數

自定義日志配置

由於日志在 ApplicationContext 之前就初始化好了,所以 SpringBoot 為我們提供了 logging.config 屬性,方便我們配置自定義日志文件。默認情況它會根據日志的依賴自動加載。

Logging System Customization
JDK (Java Util Logging) logging.properties
Log4j2ERROR 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
2
3
4
5
6
7
8
9
10
11
<springProfile name="dev">
<!-- 開發環境時激活 -->
</springProfile>

<springProfile name="dev,test">
<!-- 開發,測試的時候激活-->
</springProfile>

<springProfile name="!prod">
<!-- 當 "生產" 環境時,該配置不激活-->
</springProfile>

案例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!-- 開發環境日志級別為DEBUG/並且開發環境不寫日志文件 -->
<springProfile name="dev">
<root level="DEBUG">
<appender-ref ref="STDOUT"/>
</root>
</springProfile>

<!-- 測試環境日志級別為INFO/並且記錄日志文件 -->
<springProfile name="test">
<root level="INFO">
<appender-ref ref="FILE"/>
<appender-ref ref="STDOUT"/>
</root>
</springProfile>

springProperty

<springProperty> 標簽可以讓我們在 Logback 中使用 Spring Environment 中的屬性。如果想在logback-spring.xml中回讀 application.properties 配置的值時,這是一個非常好的解決方案

1
2
3
4
5
6
7
8
9
10
11
<!-- 讀取 spring.application.name 屬性來生成日志文件名
scope:作用域
name:在 logback-spring.xml 使用的鍵
source:application.properties 文件中的鍵
defaultValue:默認值
-->
<springProperty scope="context" name="logName" source="spring.application.name" defaultValue="myapp.log"/>

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/${logName}.log</file>
</appender>

總結

更多細節請參考官方文檔:https://docs.spring.io/spring-boot/docs/2.0.1.RELEASE/reference/htmlsingle/#boot-features-custom-log-configuration


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM