Lombok的@CustomLog,公司多場景日誌爽多了!
開發環境
- JDK 1.8
- Lombok - 1.18.16
背景
公司因為開源節流需要,需要區分重要日誌
和非重要日誌
,一個月光日誌的費用有30w之多確實恐怖了一些(PS:夠幾十個程式設計師的工資了)。所以,公司要求將日誌區分開,去除一些非必要的日誌,記錄的日誌也最多保留15天,重要日誌30天。
為了區分場景日誌,單獨搞了個Logger日誌記錄器來採集日誌,為了繼續用註解的方式在專案中,這時就需要@CustomLog
註解了,方便的將多個日誌記錄器整合在一起,話不多說,開幹!
如果在專案中直接使用@CustomLog
註解,你會看到如下圖的報錯資訊:
這個時候需要新增配置檔案lombok.config
,在專案中就可以直接使用了!
特別注意:配置檔案的位置需要在
@CustomLog
註解所在檔案的上層目錄,我為了方便通常直接放在模組的根目錄
或專案的根目錄
進行使用。
新增的配置資訊如下:
lombok.log.custom.declaration=com.lombok.log.IntegrationLog com.lombok.log.IntegrationLog.getLogger(TYPE)
注意,com.lombok.log.IntegrationLog
與com.lombok.log.IntegrationLog.getLogger(TYPE)
中間是有空格的,這樣才能生效。至於getLogger
的小括號內部,有兩個值可以使用,分別是TYPE(類的型別)
和NAME(類的名稱)
。
TYPE方式生成的程式碼
private static final IntegrationLog log = IntegrationLog.getLogger(LogPrintService.class);
NAME方式生成的程式碼
private static final IntegrationLog log = IntegrationLog.getLogger("com.lombok.service.LogPrintService");
配置成功的前提,是你的類要符合配置要求,也就是按照lombok的規範去定義類即可。
程式碼部分
為了方便鑑將多個日誌記錄器放在一起,必然需要一個整合類,這裡我定義一個名為IntegrationLog
的類,除了預設的Logger
日誌物件,還有一個業務記錄器物件BusinessLog
,用於記錄比較重要的日誌。當定義好此類後,完成上述的配置即可。
```java public class IntegrationLog {
private final Logger logger;
private final BusinessLog bizLogger;
private IntegrationLog(Class<?> clazz) {
this.logger = LoggerFactory.getLogger(clazz);
this.bizLogger = BusinessLog.getLogger(clazz);
}
public static IntegrationLog getLogger(Class<?> clazz) {
return new IntegrationLog(clazz);
}
public void info(String format, Object... args) {
logger.info(format, args);
}
public void bizInfo(String format, Object... args) {
bizLogger.info(format, args);
}
} ```
再看看註解使用的程式碼部分
程式碼中我們就可以暢快的使用了,一個log
物件包括了我們想要的方法。
java
@CustomLog
public class LogPrintService {
public void printLog() {
log.bizInfo("需要多付錢的日誌");
log.info("預設日誌");
}
}
通過檢視原始碼,就可以看到Lombok給我們生成了什麼樣的程式碼:
```java
public class LogPrintService {
private static final IntegrationLog log = IntegrationLog.getLogger(LogPrintService.class);
public LogPrintService() {
}
public void printLog() {
log.bizInfo("哈哈哈哈", new Object[0]);
}
} ``` 其實Lombok做的事情,就是幫我們建立了一個例項,簡單易懂。
參考文獻
- Lombok的Log介紹 - http://projectlombok.org/features/log