Springboot日志配置
生產環境日志及預警 https://blog.csdn.net/weixin_41158378/article/details/110701328
1. SpringBoot 日志常用配置
| 日志常用配置項 | 默認值 | 說明 |
|---|---|---|
| logging.file | 日志輸出的文件 | |
| logging.level.ROOT | info | 設置日志的輸出級別 |
| logging.level.* | info | 定義指定包的輸出級別 |
| logging.config | logback-spring.xml | 日志的配置文件 |
# 日志輸出的地址:Spring Boot默認並沒有進行文件輸出,只在控制台中進行了打印
logging.file=/home/zhou
# 日志級別 debug-> info -> warning -> error
# 默認級別為 info
# 如果設置了debug=true的時候,日志級別會自動降低為debug
# ROOT代表默認全局設置
logging.level.ROOT=INFO
# 可以設置指定包的輸出級別,這樣的話,指定的包,級別以下的日志就不在打印或者寫入日志文件
logging.level.org.springframework=ERROR
logging.level.org.apache=ERROR
logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<!--定義日志文件的存儲地址 勿在 LogBack 的配置中使用相對路徑-->
<property name="LOG_HOME" value="D:/log" />
<!-- 控制台輸出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--按pattern指定的路徑格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日志消息,%n是換行符,編碼為UTF-8-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 定義一個日滾動(每天生成一份)的日志文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件輸出的文件名-->
<FileNamePattern>${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}.log</FileNamePattern>
<!--日志文件保留天數-->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日志消息,%n是換行符,編碼為UTF-8-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
<!-- 在日滾動文件中,強制只保存錯誤INFO級別以上的信息 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<!--日志文件最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>
<!-- 定義日志全局最低輸出級別,同時向控制台和日滾動文件輸出 -->
<root level="INFO">
<appender-ref ref="console" />
<appender-ref ref="STDOUT" />
</root>
</configuration>
想要自定義文件名的可在配置文件中添加logging.config配置
logging.config=classpath:loggging-dev.xml
2. 選擇合適的日志打印級別
-
trace:更加具體的調試信息,例如調試用了什么方法,參數是什么,可以用trace
-
debug:在項目開發階段,調試程序的正確性,可以使用debug
-
info:正常的業務執行流程,系統的啟動/關閉,需要做的審計等都可以使用info
-
warn:不是錯誤,不會影響程序的正常執行,但是不建議這么做,可以用warn
-
error:程序出現某種錯誤,需要介入處理
3. 合理日志記錄,需要遵守的原則
-
搞清楚當前工程的日志級別(開發、測試還是生產環境),保證日志可以被打印
-
使用參數化形式{}占位,[]進行參數隔離
-
日志文件的名稱應該是可以自解釋的,通常至少會要求名稱中包含類型標識和時間標識
-
日志要有滾動策略,這是考慮到避免單個文件過大,以及磁盤占用問題
讓你的日志有意義且不冗余
-
HTTP請求和遠程接口調用(HTTP或RPA)時,需要打印請求的入參和結果,如果入參和結果參數都很大,只需要打印核心的參數和結果(logging.info)
-
程序異常的原因(logging.error)
-
特殊的條件分支
需要規避的日志打印過程
-
以下場景不應該打日志
- 大數據日志 空間的浪費,可以使用trace或debug,避免生產環境出現這樣的大數據日志
- 在循環中打日志,特別是大循環 排查問題困難
- 沒有意義的日志,對於系統維護沒有幫助
- 如果日志什么都說明不了,那一定要考慮修改或刪除這條日志,混淆視聽
- 密碼,郵箱,手機號碼屬於私密信息,為了避免數據泄露,不應該打,數據泄露
日志能夠對業務邏輯進行解釋
-
日志應該包含哪些元素
日志級別、日志內容、日志時間、線程名稱、類方法名 (行號、異常堆棧:可有可無)
