使用 lombok @Slf4j 註解簡化日誌功能的引入

在開發過程中, 打印必要的日誌是必不可少的一環, 而要打印日誌, 在相關的類中就要引入日誌相關屬性, 在傳統上, 一般是通過LoggerFactory.getLogger去實現的:

package net.xiaogd.demo.mybatis.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class LogDemoController {

    // 自行聲明
    private static final Logger log = LoggerFactory.getLogger((LogDemoController.class));

    //...
}

儘管這已經很簡潔, 但如果有大量的類要做類似的操作, 還是略顯重複, 從 重複性管理 的角度, 我們怎麼才能儘量減少這些重複的樣板代碼呢?

答案就是利用 lombok 的 @Slf4j 註解.

使用 lombok @Slf4j 註解的前提

自然, 在你的項目中首先需要引入 lombok, maven 中增加相關依賴, IDE 也需要做些調整, 安裝相關插件, 你可以參考前面的 引入 lombok 簡化代碼及相關 IDE 設置 進行相關操作, 此處不再贅述.

此外, 相關的日誌依賴也是要有的, 如果你已經用舊方式啓用了日誌, 相關依賴通常都是包含了的, 此處也不再展開詳說.

lombok @Slf4j 註解的具體用法

有了 lombok 後, 在類中要引入日誌功能就變得很簡潔了, 只需要在類的上面添加 @Slf4j 註解即可:

package net.xiaogd.demo.mybatis.controller;

import org.springframework.web.bind.annotation.RestController;

import lombok.extern.slf4j.Slf4j;

@Slf4j
@RestController
public class DemoController {
	// ...
}

在這之後, lombok 會爲我們注入一個 name 爲 log 的日誌屬性, 在代碼中直接使用即可:

package net.xiaogd.demo.mybatis.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import lombok.extern.slf4j.Slf4j;

@Slf4j
@RestController
public class DemoController {

	@GetMapping("/hello")
	public String hello() {
		log.info("enter hello...");
		return "hello rest";
	}
}

注意: 注入變量的缺省名字就是 log.

當然, 這個名字也可以通過lombok.log.fieldName配置去調整, 參考 lombok 官網的相關介紹: https://projectlombok.org/features/configuration 以及 https://projectlombok.org/features/log

一般不建議去調整, 畢竟 log 這個名稱最簡潔, 敲起來也最方便.

如果你現有代碼使用了傳統方式, 並且不是用的 log 這個名字, 現在又想調整爲使用 @Slf4j 方式, 那麼可以先使用 重構(refactor)--重命名(rename) 的方式改名, 然後再引入.

就好比如下你自己聲明瞭Logger log那樣:

@RestController
public class LogDemoController {

    // 自行聲明
    private static final Logger log = LoggerFactory.getLogger((LogDemoController.class));

	@GetMapping("/hello1")
	public String hello() {
		log.info("enter hello...");
		return "hello rest";
	}
}

如果你自己聲明, 則有以下一些問題:

  1. 相關聲明麻煩又冗長, 你可能很難記住, 每次要用都要去其它地方拷貝;
  2. 不同的類要根據當前的類名自行調整那個 XXX.class 的值, 如果粗心大意的拷貝而忘記改動還可能帶來一些潛在的問題;
  3. 如果錯誤引入了 LoggerLoggerFactory 接口也會導致一些潛在的問題.

而使用註解的方式就簡單多了, 你完全不用操心以上問題.

不停地消除各種重複, 提高效率是我們編碼過程中的一種追求, 關於使用 lombok @Slf4j 註解簡化日誌功能的引入就介紹到此, 更多關於 重複性管理 主題的介紹請參考 重複性管理 .

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章