嘿,好久不見,你還好嗎?
我一般都是爲大家帶來項目上比較實用的東西,這次我們來試試項目開發中對日誌的處理,希望對你有所幫助。
理論知識
1、爲什麼要用日誌?
你是否因爲項目出現問題,查找日誌文件定位錯誤花費N多時間,爲此苦不堪言?
2、Spring Boot 默認集成Logback。日誌輸出內容元素具體如下:
- 時間日期:精確到毫秒
- 日誌級別:ERROR, WARN, INFO, DEBUG or TRACE
- 進程ID
- 分隔符:— 標識實際日誌的開始
- 線程名:方括號括起來(可能會截斷控制檯輸出)
- Logger名:通常使用源代碼的類名
- 日誌內容
3、日誌級別從低到高分爲:
TRACE < DEBUG < INFO < WARN < ERROR < FATAL
4、根據不同的日誌系統,你可以按如下規則組織配置文件名,就能被正確加載:
Logback:logback-spring.xml, logback-spring.groovy, logback.xml, logback.groovy Log4j:log4j-spring.properties, log4j-spring.xml, log4j.properties, log4j.xml Log4j2:log4j2-spring.xml, log4j2.xml JDK (Java Util Logging):logging.properties
Spring Boot官方推薦優先使用帶有 -spring
的文件名作爲你的日誌配置(如使用 logback-spring.xml
,而不是logback.xml),
命名爲logback-spring.xml的日誌配置文件,spring boot可以爲它添加一些spring boot特有的配置項。
理論知識很重要!!! 雖說實踐出真知,但是沒有理論做支持,實踐只能是盲目的瞎摸,所以,在學好理論的前提下,結合實踐,就能更好的爲我們服務。
以前在寫項目的時候,用的是Log4j,那時候就感覺他很強大,日誌滾動啊,日誌保存期限啊,設置最大存儲量,異常發送郵件,等等功能。 總之,log很強大,他能幫助我們解決很多很多的問題。
實際開發
日誌功能如此強大,那我們怎麼在項目中如何配置,又該如何使用呢?
先申明: 我這裏是用Spring Boot搭建的項目,版本是2.x, 有可能你用的是Struts2+Spring+SpringMVC,等等之類的框架搭建。 我想說的是,推薦使用Spring Boot,你也可以將你的SS*項目改成Spring Boot。 如果你有好的建議也可以push給我,我們一起交流,學習。
1、我們先看項目目錄:
2、在 application.yml
中需要這樣配置以下內容:
spring:
profiles:
active: dev
logback:
appName: examplelog
fileType: out
3、在 -dev.yml
, -test.yml
, -prod.yml
中需要添加以下配置:
logback:
logDir: log/dev
logging:
level:
com.fengwenyi.log: debug
com.fengwenyi.log.service: error
4、我們來看一下 logback-spring.xml
寫法:
請參見源碼
5、他有什麼功能呢?
- 日誌可以輸出到指定文件
- 日誌可以按運行環境進行輸出
- 日誌可以按日期進行輸出
- 不同包可以指定不同的輸出級別
下面我們詳細說明一下:
他會根據你的配置生成對應的目錄,來存放相應的日誌文檔,方便我們查詢。比如,開發時,我們看dev
,測試人員看test
,上線運行,運維人員看 prod
,這樣的好處是,我們不僅可以方便查詢錯誤定位,也可以設置不同的輸出級別。像醬紫
是不是很清晰?
另外,他外按日期,每天一個文檔,是不是很貼心?
保存多久由你定。
是不是快要感動哭了?
那就 star
一下吧,謝謝咯。
API
還是簡單說一下配置問題吧:
第一步,你要將 logback-spring.xml
,放到跟我相同的目錄,內容,可以複製過去,也可以適當修改。
第二步,application.yml
logback:
appName: examplelog # 日誌文件前綴
fileType: out # 日誌後綴名
第三步,application-dev.yml,-test.yml,-prod.yml
logback:
logDir: log/dev # 日誌目錄
logging:
level:
# 日誌級別配置,格式:(包名: 級別)
com.fengwenyi.log: debug
com.fengwenyi.log.service: error
參考文檔
[1] SpringBoot進階教程 | 第二篇:日誌組件logback實現日誌分級打印
[3] 本節源碼