首頁 > 軟體

SpringBoot深入瞭解紀錄檔的使用

2022-07-14 14:03:08

1. 紀錄檔的作用

紀錄檔是程式的重要組成部分,在程式報錯的時候,如果我們不看紀錄檔,是很難排查出錯誤的,除非你真的是很有經驗.所以紀錄檔最主要的作用就是排除和定位問題.

紀錄檔提供的功能:

  • 記錄⽤戶登入⽇志,⽅便分析⽤戶是正常登入還是惡意破解⽤戶。
  • 記錄系統的操作⽇志,⽅便資料恢復和定位元運算⼈。
  • 記錄程式的執⾏時間,⽅便為以後優化程式提供資料⽀持

2. 紀錄檔怎麼用

在我們啟動 SpringBoot 專案的時候就會輸出紀錄檔:

3. 自定義紀錄檔列印

主要分兩個步驟:

在一個類中先獲得列印紀錄檔物件(紀錄檔框架提供的紀錄檔物件,而紀錄檔框架預設已經整合到 SpringBoot 裡了)使用紀錄檔物件提供的方法實現紀錄檔的列印

3.1 得到紀錄檔物件

得到紀錄檔物件 Logger ,它來自於 slf4j,不要導錯了包,在程式中獲取⽇志物件需要使⽤⽇志⼯⼚ LoggerFactory

3.2 使用紀錄檔物件提供的方法列印紀錄檔

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@ResponseBody
public class UserController {
//1. 先得到紀錄檔物件(來自 slf4j)
    private static final Logger log =
        LoggerFactory.getLogger(UserController.class); //設定當前的型別
    @RequestMapping("/sayhi")
    public void sayHi(){
        //2. 使用紀錄檔物件提供的列印方法進行紀錄檔列印
        log.trace("我是 trace");
        log.debug("我是 debug");
        log.info("我是 info");
        log.warn("我是 warn");
        log.error("我是 error");
    }
}

有些沒列印,因為他只會列印跟他同級別的或者比他級別高的紀錄檔,他這裡預設是 info 級別.

3.3 紀錄檔格式說明

4. 紀錄檔級別

反饋一些需要的紀錄檔,並不需要把所有的都列印出來

就像是如果你是一家 2 萬人的公司的老闆,需要每天看他們的反饋資訊,難道每個人都看嗎?這顯然看不完,你只需要看一些領頭的就行…

4.1 紀錄檔級別分類

紀錄檔級別分為:

  • trace: 微量,少許的意思(級別最低)
  • debug: 偵錯紀錄檔
  • info: 普通訊息紀錄檔
  • warn: 警告紀錄檔
  • error: 錯誤紀錄檔
  • fatal: 致命的紀錄檔(系統輸出的紀錄檔,不能自定義列印)

紀錄檔級別的順序:

越往上接收到的訊息就越少。

4.2 紀錄檔級別的設定

⽇志級別設定只需要在設定⽂件中設定“logging.level”設定項即可:

# 設定全域性的紀錄檔級別
logging.level.root=warn

# 設定區域性資料夾的紀錄檔級別
logging.level.com.example.demo.UserController=trace

之前的 info 級別紀錄檔就沒列印了.

注意:當存在區域性紀錄檔級別和全域性的紀錄檔級別設定時,那麼當存取區域性紀錄檔時,使用的是區域性紀錄檔級別.也就是 區域性紀錄檔優先順序 > 全域性紀錄檔級別

5. 紀錄檔持久化

以上的⽇志都是輸出在控制檯上的,然⽽在⽣產環境上咱們需要將⽇志儲存下來,以便出現問題之後追溯問題,把⽇志儲存下來的過程就叫做持久化。

紀錄檔持久化(將紀錄檔永久的儲存到磁碟的某個位置)

1:在組態檔中設定紀錄檔儲存的路徑,當設定了儲存路勁之後,那麼紀錄檔就會自動進行持久化

2:在組態檔中設定紀錄檔儲存的名稱,紀錄檔會自動進行持久化

#設定紀錄檔儲存的目錄寫法一
logging.file.path=D:\log
#設定紀錄檔儲存的目錄寫法二
logging.file.path=D:/log

開啟這個檔案:

# 設定紀錄檔的儲存名稱
logging.file.name=D:\log\spring-boot.log 

6. 更簡單的實現自定義紀錄檔的列印

6.1 準備工作,新增 lombok 到專案中

如果你當初沒有新增 lombok 又不想重開專案,有這樣一種辦法,下載外掛 EditStarters:

6.2 使用 @Slf4j 得到紀錄檔物件

import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@ResponseBody
@Slf4j //替代了之前需要通過 LoggerFactory.getLogger 操作
public class UserController {
//1. 先得到紀錄檔物件(來自 slf4j)
//    private static final Logger log =
//        LoggerFactory.getLogger(UserController.class); //設定當前的型別
    @RequestMapping("/sayhi")
    public void sayHi(){
        //2. 使用紀錄檔物件提供的列印方法進行紀錄檔列印
        log.trace("我是 trace");
        log.debug("我是 debug");
        log.info("我是 info");
        log.warn("我是 warn");
        log.error("我是 error");
    }
}

6.3 使用 log 物件自定義列印紀錄檔

.class檔案,他是給我們轉換了的:

Java 程式的運⾏原理:

Lombok 的作⽤如下圖所示:

6.4 lombok 更多註解說明

註解作用
@Getter⾃動新增 getter ⽅法
@Setter⾃動新增 setter ⽅法
@ToString⾃動新增 toString ⽅法
@EqualsAndHashCode⾃動新增 equals 和 hashCode ⽅法
@NoArgsConstructor⾃動新增⽆參構造⽅法
@AllArgsConstructor⾃動新增全屬性構造⽅法,順序按照屬性的定義順序
@NonNull屬性不能為 null
@RequiredArgsConstructor⾃動新增必需屬性的構造⽅法,final + @NonNull 的屬性為必需

組合註解:

註解作用
@Data@Getter + @Setter + @ToString +@EqualsAndHashCode +@RequiredArgsConstructor +@NoArgsConstructor

紀錄檔註解:

註解作⽤
@Slf4j新增⼀個名為 log 的⽇志,使⽤ slf4j

到此這篇關於SpringBoot深入瞭解紀錄檔的使用的文章就介紹到這了,更多相關SpringBoot紀錄檔內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com