Lombok的@CustomLog,公司多場景日誌爽多了!

語言: CN / TW / HK

開發環境

  • JDK 1.8
  • Lombok - 1.18.16

背景

公司因為開源節流需要,需要區分重要日誌非重要日誌,一個月光日誌的費用有30w之多確實恐怖了一些(PS:夠幾十個程序員的工資了)。所以,公司要求將日誌區分開,去除一些非必要的日誌,記錄的日誌也最多保留15天,重要日誌30天。

為了區分場景日誌,單獨搞了個Logger日誌記錄器來採集日誌,為了繼續用註解的方式在項目中,這時就需要@CustomLog註解了,方便的將多個日誌記錄器集成在一起,話不多説,開幹!

如果在項目中直接使用@CustomLog註解,你會看到如下圖的報錯信息: image.png

這個時候需要添加配置文件lombok.config,在項目中就可以直接使用了!

特別注意:配置文件的位置需要在@CustomLog註解所在文件的上層目錄,我為了方便通常直接放在模塊的根目錄項目的根目錄進行使用。

image.png

添加的配置信息如下: lombok.log.custom.declaration=com.lombok.log.IntegrationLog com.lombok.log.IntegrationLog.getLogger(TYPE) 注意,com.lombok.log.IntegrationLogcom.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