Spring Boot系列 日誌配置

2021-09-05 12:45:34 字數 3895 閱讀 9357

原文:

日誌,通常不會在需求階段作為乙個功能單獨提出來,也不會在產品方案中看到它的細節。但是,這絲毫不影響它在任何乙個系統中的重要的地位。

為了保證服務的高可用,發現問題一定要即使,解決問題一定要迅速,所以生產環境一旦出現問題,預警系統就會通過郵件、簡訊甚至**的方式實施多維轟炸模式,確保相關負責人不錯過每乙個可能的bug。

預警系統判斷疑似bug大部分源於日誌。比如某個微服務介面由於各種原因導致頻繁呼叫出錯,此時呼叫端會捕獲這樣的異常並列印error級別的日誌,當該錯誤日誌達到一定次數出現的時候,就會觸發報警。

try  catch(exception e)
所以日誌至關重要,這篇就來介紹下在spring boot如何配置日誌。

spring boot預設使用logback日誌系統,如果不需要更改為其他日誌系統如log4j2等,則無需多餘的配置,logback預設將日誌列印到控制台上。

如果要使用logback,原則上是需要新增dependency依賴的

org.springframework.boot

spring-boot-starter-logging

但是因為新建的spring boot專案一般都會引用spring-boot-starter或者spring-boot-starter-web,而這兩個起步依賴中都已經包含了對於spring-boot-starter-logging的依賴,所以,無需額外新增依賴。

我們基於《沒做過大專案,但我會建大專案》中建立的專案,啟動springboot-demo專案,可以看到列印的日誌資訊如下。

以上至預設配置啟動下的日誌顯示情況,如果需要做一些定製的日誌配置比如將日誌儲存到檔案等應該如何配置,下面就通過幾個小問題來看看spring boot下是如何解決這些問題的。

如何在專案中列印日誌

新建乙個配置類logconfig,注入乙個bean,並在方法中列印日誌

spring boot預設的日誌級別為info,這裡列印的是info級別的日誌所以可以顯示。

很多開發者在日常寫private static final logger log = logge***ctory.getlogger(logconfig.class);總覺得後面的logconfig.class可有可無,因為隨便寫個其他類也不會報錯,但是準確編寫class資訊能夠提供快速定位日誌的效率。

我們看到列印的日誌內容左側就是對應的類名稱,這個是通過private static final logger log = logge***ctory.getlogger(logconfig.class);實現的。

如果將logconfig.class換成***.class,輸出日誌就會顯示對應的***類名。這樣宣告的好處就是方便定位日誌。

如何將日誌資訊儲存到檔案

在本機環境,我們習慣在控制台看日誌,但是線上我們還是要通過將日誌資訊儲存到日誌檔案中,查詢日誌檔案即可。

那麼應該如何配置才能將日誌資訊儲存到檔案呢?

logging.path=/users/jackie/workspace/rome/ 

logging.file=springbootdemo.log

logging.path該屬性用來配置日誌檔案的路徑

logging.file

該屬性用來配置日誌檔名,如果該屬性不配置,預設檔名為spring.log

可以看到在指定路徑下生成了springbootdemo.log檔案,該檔案內容和控制台列印內容一致。

如果注釋logging.file=springbootdemo.log則生成預設檔名spring.log

如何設定日誌級別

日誌級別總共有tarce < debug < info < warn < error < fatal ,且級別是逐漸提供,如果日誌級別設定為info,則意味trace和debug級別的日誌都看不到。

上例中我們列印了乙個info級別的日誌,因為spring boot預設級別就是info,如果我們改為warn,是否還能看到這行日誌資訊。

logging.level

該屬性用於配置日誌級別。

logging.level.root=warn
這裡是用的root級別,即專案的所有日誌,我們也可以使用package級別,即指定包下使用相應的日誌級別,下面再看。

你沒看錯,這個專案是成功啟動了,但是幾乎沒有內容,這是因為之前列印的日誌級別都是info,這裡設定為warn,所以info級別的日誌都不顯示。

這裡我們可以改動root還是info級別,將指定包下的日誌級別設定為warn

可以看到除了logconfig類中的info級別的日誌沒有列印出來,其他的info級別的日誌都正常輸出了。

如何定製自己的日誌格式

logging.pattern.console=%d [%thread] %-5level %logger- %msg%n 

logging.pattern.file=%d [%thread] %-5level %logger- %msg%n

logging.pattern.console該屬性用於定製日誌輸出格式。

上述配置的編碼中,對應符號的含義如下

%d——日誌輸出時間

%thread——輸出日誌的程序名字,這在web應用以及非同步任務處理中很有用

%-5level——日誌級別,並且使用5個字元靠左對齊

%logger- ——日誌輸出者的名字

%msg——日誌訊息

%n——平台的換行符

限於篇幅,還有相關特性,這裡不一一陳述了。

分類: spring

標籤: spring boot

Spring Boot系列 日誌配置

日誌,通常不會在需求階段作為乙個功能單獨提出來,也不會在產品方案中看到它的細節。但是,這絲毫不影響它在任何乙個系統中的重要的地位。為了保證服務的高可用,發現問題一定要即使,解決問題一定要迅速,所以生產環境一旦出現問題,預警系統就會通過郵件 簡訊甚至 的方式實施多維轟炸模式,確保相關負責人不錯過每乙個...

Spring Boot系列 日誌配置

但是因為新建的spring boot專案一般都會引用spring boot starter或者spring boot starter web,而這兩個起步依賴中都已經包含了對於spring boot starter logging的依賴,所以,無需額外新增依賴。logging.path users ...

MySQL調優系列 日誌分析

前言 本篇主要總結一下mysql資料庫的幾種日誌,用於日常維護過程中問題解決和效能優化等,稍顯基礎,日常積累之用。文章的部分內容會將mysql資料庫和sql server資料庫部分內容做乙個對比,非抨擊孰優孰劣,只敘述技術,權做學習之用。閒言少敘,直接進入本篇的正題。技術準備 宿主於ubuntu14...