Spring Boot之日誌
小弟剛接觸spring boot不久,僅想通過寫網誌的形式來加深記憶和方便以後查閱。如內容有不正確之處,還望各位大佬海量汪涵,並給小弟指出,共同進步。
1. 概述
Spring Boot使用Commons Logging進行所有內部日誌記錄,併爲Java Util Logging、Log4J2和Logback提供默認配置。
一般來說,不需要更改日誌相關性,並且Spring Boot默認值將正常工作。
2. 日誌格式
輸出以下項目:
- 2017-9-20 18:52:44.236:日期和時間 – 精確到毫秒容易排序。
- INFO:日誌級別,ERROR、WARN、INFO、DEBUG和TRACE。
- 10984:進程id。
- --- :分離器來區分日誌消息的開始。
- [main]:線程名。
- 日誌名:通常是源class的類名(縮寫)。
- 日誌信息。
3.顏色編碼輸出
顏色輸出有助於可讀性。可以通過 spring.output.ansi.enabled來設置。使用%clr轉換字配置色彩編碼。在最簡單的形式下,轉換器將根據日誌級別對輸出進行着色。
- 日誌級別映射到顏色如下:
日誌級別 |
顏色 |
FATAL |
紅色 |
ERROR |
紅色 |
WARN |
黃色 |
INFO |
綠色 |
DEBUG |
綠色 |
TRACE |
綠色 |
4.日誌配置
#log ERRORINFO
debug:false
logging:
file: ng-api.log
level:
root: INFO
org:
hibernate: ERROR
springframework:
web: INFO
com:
eugene:
base: DEBU
4.1日誌文件輸出
logging:
file: ng-api.lo
指定日誌文件輸出到指定的文件路徑,這裏的名稱可以是絕對路徑也可以是相對於當前目錄的相對路徑。
logging:
file: ng-api.log
指定日誌文件輸出到指定的目錄中。
4.2日誌文件切割
默認情況下,Spring Boot對日誌文件每10M進行一次切割。
4.3日誌級別
logging:
level:
root: INFO
org:
hibernate: ERROR
springframework:
web: INFO
日誌系統可以使用logging.level來指定日誌級別。
logging:
level:
com:
eugene:
base: DEBUG
指定com.eugene.base包的日誌基本爲DEBUG。
5.自定義日誌配置
由於日誌的配置文件是在Spring Context加載之前進行加載的,所以我們無法使用註解@Configuration和@PropertySources來控制日誌的配置。
Spring Boot在啓動時會檢查src/main/resources/目錄或者通過logging.config屬性指定的位置,通過不同的配置文件名來區分使用不同的日誌系統。
- 日誌文件名和日誌系統對應關係如下:
logback |
logback-spring.xml |
Log4j2 |
log4j2-spring.xml |
JDK(Java Util Logging) |
logging.properties |
5.1 logback
以logback爲例,進行多環境配置。因爲多環境使用的是spring提供的profile功能,所以logback配置文件必須以logback-spring.xml命名。
- logback-spring.xm
<?xml version="1.0"encoding="UTF-8"?>
<configuration>
<springProfile name="master">
<!-- 將日誌記錄到文件中-->
<appender name="LOG"class="class名">
<!-- 日誌文件輸出路徑-->
<file>/var/log/mylog/log.log</file>
<append>true</append>
<encoder>
<!-- 日誌格式->
<pattern>時間: %date{yyyy-MM-dd HH:mm:ss.SSS} 耗時: %-4relative 毫秒 線程名稱: [%thread]%logger{35} -%msg %n
</pattern>
<!-- 此處設置字符集 -->
<charset>UTF-8</charset>
</encoder>
</appender>
</springProfile>
<springProfile name="dev">
<!-- 將日誌記錄到文件中-->
<appender name="LOG" class=" ">
<file>/var/log/ssab/log.log</file>
<append>true</append>
<encoder>
<pattern>時間: %date{yyyy-MM-dd HH:mm:ss.SSS} 耗時: %-4relative 毫秒 線程名稱: [%thread]%logger{35} -%msg %n
</pattern>
<!-- 此處設置字符集 -->
<charset>UTF-8</charset>
</encoder>
</appender>
</springProfile>
<springProfilename="master">指定當前配置的日誌格式對應的開發環境,有如dev-開發環境、pro生產環境等。即啓動dev環境的時候,日誌輸出會採用相應的環境配置格式。