SpringBoot深入瞭解日志的使用

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日志內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: