Spring Boot系列——日誌配置

來源:互聯網
上載者:User

標籤:context   eth   設定   work   簡訊   訊息   sources   start   imageview   

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

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

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

try {????調用某服務} catch(Exception e) {????LOG.error("錯誤資訊", e);}

所以日誌至關重要,這篇就來介紹下在Spring Boot如何配置日誌。

Spring Boot預設日誌系統

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

如果要使用LogBack,原則上是需要添加dependency依賴的

<groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></pre>

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

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

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

如何在項目中列印日誌

建立一個配置類LogConfig,注入一個Bean,並在方法中列印日誌

package com.jackie.springbootdemo.config;import com.jackie.springbootdemo.model.Person;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configuration public class LogConfig {    private static final Logger LOG = LoggerFactory.getLogger(LogConfig.class);    @Bean public Person logMethod() {        LOG.info("==========print log==========");        return new Person();    }}

運行SpringBootDemoApplication,可以看到控制台的日誌

Spring Boot預設的記錄層級為INFO,這裡列印的是INFO層級的日誌所以可以顯示。

很多開發人員在日常寫private static final Logger LOG = LoggerFactory.getLogger(LogConfig.class);總覺得後面的LogConfig.class可有可無,因為隨便寫個其他類也不會報錯,但是準確編寫class資訊能夠提供快速定位日誌的效率。

我們看到列印的日誌內容左側就是對應的類名稱,這個是通過private static final Logger LOG = LoggerFactory.getLogger(LogConfig.class);實現的。

如果將LogConfig.class換成xxx.class,輸出日誌就會顯示對應的xxx類名。這樣聲明的好處就是方便定位日誌。

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

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

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

在我們建立的springboot-demo項目中,resources目錄下有個application.properties檔案(如果是application.yml檔案也是同樣的道理,只是採用的不同的編寫風格而已)。添加如下配置

logging.path=/Users/jackie/workspace/rome/ logging.file=springbootdemo.log

logging.path

該屬性用來配置記錄檔的路徑

logging.file

該屬性用來配置記錄檔名,如果該屬性不配置,預設檔案名稱為spring.log

運行SpringBootDemoApplication

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

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

如何設定記錄層級

記錄層級總共有TARCE < DEBUG < INFO < WARN < ERROR < FATAL ,且層級是逐漸提供,如果記錄層級設定為INFO,則意味TRACE和DEBUG層級的日誌都看不到。

上例中我們列印了一個INFO層級的日誌,因為Spring Boot預設層級就是INFO,如果我們改為WARN,是否還能看到這行日誌資訊。

logging.level

該屬性用於配置記錄層級。

在applicaition.properties中添加

logging.level.root=warn

這裡是用的root層級,即項目的所有日誌,我們也可以使用package層級,即指定包下使用相應的記錄層級,下面再看。

啟動SpringBootDemoApplication

你沒看錯,這個項目是成功啟動了,但是幾乎沒有內容,這是因為之前列印的記錄層級都是INFO,這裡設定為WARN,所以INFO層級的日誌都不顯示。

這裡我們可以改動root還是INFO層級,將指定包下的記錄層級設定為WARN

logging.level.root=INFOlogging.level.com.jackie.springbootdemo.config=WARN

啟動SpringBootDemoApplication

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

如何定製自己的日誌格式

在application.properties中添加

logging.pattern.console=%d{yyyy/MM/dd-HH:mm:ss} [%thread] %-5level %logger- %msg%n logging.pattern.file=%d{yyyy/MM/dd-HH:mm} [%thread] %-5level %logger- %msg%n

logging.pattern.console

該屬性用於定製日誌輸出格式。

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

%d{HH:mm:ss.SSS}——日誌輸出時間%thread——輸出日誌的進程名字,這在Web應用以及非同步任務處理中很有用%-5level——記錄層級,並且使用5個字元靠左對齊%logger- ——日誌輸出者的名字%msg——日誌訊息%n——平台的分行符號

啟動SpringBootDemoApplication

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

如果您覺得閱讀本文對您有協助,請點一下“推薦”按鈕,您的“推薦”將是我最大的寫作動力!如果您想持續關注我的文章,請掃描二維碼,關注JackieZheng的公眾號,我會將我的文章推送給您,並和您一起分享我日常閱讀過的優質文章。

Spring Boot系列——日誌配置

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.