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介紹 - https://projectlombok.org/features/log