一塊兒來學SpringBoot | 第三篇:SpringBoot日誌配置

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

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

Java 雖然有不少可用的日誌框架,但請不要擔憂,通常來講,使用 SpringBoot 默認的 Logback 就能夠了。

<!-- more -->java

日誌格式

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: [/*]
輸出以下元素:

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

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

日誌輸出

SpringBoot 默認爲咱們輸出的日誌級別爲 INFOWARNERROR,如須要輸出更多日誌的時候,能夠經過如下方式開啓spring

  • 命令模式配置: java -jar app.jar --debug=true , 這種命令會被 SpringBoot 解析,且優先級最高
  • 資源文件配置: application.properties 配置 debug=true 便可。該配置只對 嵌入式容器、Spring、Hibernate生效,咱們本身的項目想要輸出 DEBUG 須要額外配置(配置規則:logging.level.<logger-name>=<level>
日誌輸出級別配置
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 來改變默認值sql

  • 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}。目前支持的顏色有(bluecyanfaintgreenmagentaredyellowapache

文件保存

默認狀況下,SpringBoot 僅將日誌輸出到控制檯,不會寫入到日誌文件中去。若是除了控制檯輸出以外還想寫日誌文件,則須要在application.properties 設置logging.filelogging.path 屬性。微信

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

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

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

自定義日誌配置

因爲日誌在 ApplicationContext 以前就初始化好了,因此 SpringBoot 爲咱們提供了 logging.config 屬性,方便咱們配置自定義日誌文件。默認狀況它會根據日誌的依賴自動加載。app

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 的一些擴展屬性框架

使用擴展屬性 springProfilespringProperty 讓你的 logback-spring.xml 配置顯得更有逼格,當別人還在苦苦掙扎弄logback-{profile}.xml的時候 你一個文件就搞定了...

springProfile

<springProfile> 標籤使咱們讓配置文件更加靈活,它能夠選擇性的包含或排除部分配置

<springProfile name="dev">
    <!-- 開發環境時激活 -->
</springProfile>

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

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

案例

<!-- 開發環境日誌級別爲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 配置的值時,這是一個很是好的解決方案

<!-- 讀取 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

目前不少大佬都寫過關於 SpringBoot 的教程了,若有雷同,請多多包涵,本教程基於最新的 spring-boot-starter-parent:2.0.1.RELEASE編寫,包括新版本的特性都會一塊兒介紹...

說點什麼

  • 我的QQ:1837307557
  • battcn開源羣(適合新手):391619659
  • 微信公衆號(歡迎調戲):battcn

公衆號

我的博客:http://blog.battcn.com/

相關文章
相關標籤/搜索