在開發過程中, 打印必要的日誌是必不可少的一環, 而要打印日誌, 在相關的類中就要引入日誌相關屬性, 在傳統上, 一般是通過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";
}
}
如果你自己聲明, 則有以下一些問題:
- 相關聲明麻煩又冗長, 你可能很難記住, 每次要用都要去其它地方拷貝;
- 不同的類要根據當前的類名自行調整那個
XXX.class
的值, 如果粗心大意的拷貝而忘記改動還可能帶來一些潛在的問題; - 如果錯誤引入了
Logger
和LoggerFactory
接口也會導致一些潛在的問題.
而使用註解的方式就簡單多了, 你完全不用操心以上問題.
不停地消除各種重複, 提高效率是我們編碼過程中的一種追求, 關於使用 lombok @Slf4j 註解簡化日誌功能的引入就介紹到此, 更多關於 重複性管理 主題的介紹請參考 重複性管理 .