1. 程式人生 > 其它 >Spring-boot使用logback實現日誌配置(1),推薦

Spring-boot使用logback實現日誌配置(1),推薦

Spring-boot使用logback實現日誌配置(1),推薦

2. 配置日誌輸出位置

logging:
? path: /Users/gujiachun/Downloads

執行後,我們可以看到Downloads下生成了一個檔案spring.log這檔案是spring生成
[圖片上傳失敗...(image-aad93a-1579158948625)]

3. 配置日誌輸出檔案 ,這樣可以指定日誌輸出到哪個檔案

logging:
? file: /Users/gujiachun/Downloads/test.log

我們可以看到在Downloads生成了test檔案

這裡注意:我們可以配置日誌儲存位置,以及具體輸出的檔案,如果同時配置的話,會使用我們指定的file為主

4. 配置日誌 輸出級別

日誌一般主要看重的有5個級別,優先順序如 DEBUG<INFO<WARN<ERROR<FATAL等,而springboot預設配置是INFO級別,所以我們測試程式碼中寫了三行,在結果中我們只看到了info 和 error,因為debug優先順序比info低,所以我們看不到。

那麼我們配置一下格式 logging.level.包名或類名: 級別 即可, 舉例如下

logging:
? pattern:
? ? console: "%d - %msg%n"
? file: /Users/gujiachun/Downloads/test.log
? level:
? ? #這裡可以是包名也可以是類名
? ? com.rainbow.goods.test: debug

執行後,我們可以看到 原來只能看到 info 和 error 的,現在的debug也可以看到

lobback-spring.xml 配置

一、我們先把application.yml的關於日誌的註釋掉,新建一個檔案logback-spring.xml,為什麼要取這個名字呢,Spring Boot官方推薦優先使用帶有-spring的檔名作為你的日誌配置(如使用logback-spring.xml,而不是logback.xml),如果我們想自定義名字,可以在 application.yml中通過logging.config=classpath:/xxx.xml等方式配置。

二、注意幾個 xml節點的含義

1、根節點包含的屬性

? ? scan:當此屬性設定為 true 時,配置檔案如果發生改變,將會被重新載入,預設true 。
? ? scanPeriod:設定監測配置檔案是否有修改的時間間隔,如果沒有給出時間單位,預設單位是毫秒。當 scan 為 true 時,此屬性生效。預設的時間間隔為1分鐘。
? ? debug:當此屬性設定為 true 時,將打印出 logback 內部日誌資訊,實時檢視 logback 執行狀態。預設值為 false

2、子節點

? ?** root節點是必選節點,用來指定最基礎的日誌輸出級別,只有一個level屬性。
? ?
level:用來設定列印級別**,大小寫無關:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,不能設定為INHERITED或者同義詞NULL。預設是DEBUG。可以包含零個或多個元素,標識這個appender將會新增到這個loger。

3、子節點 設定上下文名稱

? ? 每個logger都關聯到logger上下文,預設上下文名稱為“default”。但可以使用設定成其他名字,用於區分不同應用程式的記錄。一旦設定,不能修改,可以通過 %contextName 來列印日誌上下文名稱,一般來說我們不用這個屬性,可有可無。

4、子節點 設定變數

用來定義變數值的標籤, 有兩個屬性,name和value;其中name的值是變數的名稱,value的值時變數定義的值。通過定義的值會被插入到logger上下文中。定義變數後,可以使“${}”來使用變數。

5、子節點

appender用來格式化日誌輸出節點,有倆個屬性name和class,class用來指定哪種輸出策略,常用就是控制檯輸出策略和檔案輸出策略。控制檯輸出 ConsoleAppender

6、子節點五

用來設定某一個包或者具體的某一個類的日誌列印級別、以及指定 僅有一個 name 屬性,一個可選的 level 和一個可選的 addtivity 屬性。
? ? name :用來指定受此loger約束的某一個包或者具體的某一個類。
? ? level :用來設定列印級別,大小寫無關:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,還有一個特俗值INHERITED或者同義詞NULL,代表強制執行上級的級別。如果未設定此屬性,那麼當前loger將會繼承上級的級別。
? ? addtivity :是否向上級loger傳遞列印資訊。預設是true。

簡要說明

appender:配置項,規則,通過這個節點內容配置,我們可以配置輸出位置(控制檯,檔案),輸出格式等
root:根節點,表明整個專案基本的日誌級別,裡面可以應用多個appender規則

在上面的 logback-spring.xml中,appender配置了一個規則, ConsoleAppender表明日誌輸出到控制檯,layout表明輸出格式,root節點配置表明該專案基礎的日誌級別為info,引入 控制檯輸出的規則,那麼我們執行看結果

從結果上來看,配置的是 info級別,所以 debug的沒有輸出,現在如果我想把日誌輸出到檔案怎麼處理呢,可以使用如下配置,新增一個 appender規則,由於日誌可能比較多,一般是按照日期來輸出日誌,因此如下配置了每天一個日誌到指定位置

啟動執行

如果我們想把info的日誌和error的日誌區分到兩個檔案放置,該怎麼寫呢?

我們可以新建一個規則,結構如上圖,只是在裡面添加了一個過濾器,使用的是範圍過濾,也就是攔截Error級別的資訊,如下

啟動執行

執行後,我們可以在Downloads下的error.log中看到 裡面只有一條記錄,關於error的記錄,但是我們在info的那個檔案中,依舊有info和error的資訊,那麼如果將info提取出來呢? 能不能也想這樣新增一個過濾器呢,測試一下,經過測試我們發現沒有作用,因為攔截info,error還是會顯示,因為error的優先順序高,那麼我們可以利用LevelFilter方法來處理,如下

執行後,發現確實實現了 ?info 和 error的日誌分開,但是 在上圖例子中,雖然我們排除了 error,但是除開info,如果我們還有 warn級別的日誌資訊,還是會輸出在 info.log檔案中,因為warn優先順序比info高,但是我們只是攔截了error而已。

總結

以上介紹了logback的基本用法,下一篇老顧會介紹多環境下的使用,以及生產環境如何配置,謝謝!!!

如果喜歡本文,可以關注我們的官方賬號,第一時間獲取資訊。
你的關注是對我們更新最大的動力哦~

今日福利(點選下方文字超連結獲取)




如果你的技術提升遇到瓶頸了,或者缺高階Android進階視訊學習提升自己,這有大量大廠面試題為你面試做準備!
點選Android 學習,面試文件,視訊收集大整理獲取

最後

一次偶然,從朋友那裡得到一份“java高分面試指南”,裡面涵蓋了25個分類的面試題以及詳細的解析:JavaOOP、Java集合/泛型、Java中的IO與NIO、Java反射、Java序列化、Java註解、多執行緒&併發、JVM、Mysql、Redis、Memcached、MongoDB、Spring、Spring Boot、Spring Cloud、RabbitMQ、Dubbo 、MyBatis 、ZooKeeper 、資料結構、演算法、Elasticsearch 、Kafka 、微服務、Linux。

這不,馬上就要到招聘季了,很多朋友又開始準備“金三銀四”的春招啦,那我想這份“java高分面試指南”應該起到不小的作用,所以今天想給大家分享一下。

請注意:關於這份“java高分面試指南”,每一個方向專題(25個)的題目這裡幾乎都會列舉,在不看答案的情況下,大家可以自行測試一下水平 且由於篇幅原因,這邊無法展示所有完整的答案解析

資料領取方式:點選【java高分面試指南-25大專題分類】