1. 程式人生 > 其它 >jsonlayout log4j2 時間問題_Java Web開發入門(8)—— lombok + Log4j2

jsonlayout log4j2 時間問題_Java Web開發入門(8)—— lombok + Log4j2

技術標籤:jsonlayout log4j2 時間問題

在上一篇中講述瞭如何在工程中配置Log4j2來記log。

在使用Log4j2的過程中,有一個不太容易被注意的小問題:在每個要記log的類裡面,都要定一個org.apache.logging.log4j.Logger的例項,並且把當前類作為引數傳給org.apache.logging.log4j.LogManager.getLogger()。

初看起來不是什麼問題,但在實際工程中有時候是一個讓人很惱火的問題:

1)需要在每個類裡面都新增類似的這麼一行

	private static Logger logger = LogManager.getLogger(HelloworldApplication.class);

比較麻煩。

2)在實際工作中,建立新的類的時候,前面的這麼一行經常是從其他現成的類裡面拷貝過來的,一旦忘記改當前類名的話,新建立的類打印出來的log就會都被寫成HelloworldApplication類的log:

2019-07-25 10:05:04,692 [WARN ] HelloworldApplication.xxx() - xxxxxxx

為了省去這兩個小小的麻煩、最重要的是避免出現類似的低階錯誤浪費研發的時間,推薦採用lombok annotation的方案來自動生成相關的程式碼。

具體操作如下:

引入依賴

開啟pom檔案,新增lombok的依賴:

<dependency>
 <groupId>org.projectlombok</groupId>
 <artifactId>lombok</artifactId>
 <version>1.14.8</version>
 <scope>provided</scope>
</dependency>
注:在本次試驗中發現,使用最新的版本1.18.8會出問題,無法識別@Log4j2。而使用1.14.8版本沒有這個問題。
lombok只是在編譯的過程中生效,不需要打包進jar或者war,所以此處的scope設定成provided。

記log

在要記log的類裡面找到這一行程式碼並刪除:

	private static Logger logger = LogManager.getLogger(HelloworldApplication.class);

可以同時刪除匯入的類:

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
注:下一篇會介紹自動匯入要用到的import的方法。

在要列印log的類前面加上一行註解@Log4j2,如:

@Log4j2
@SpringBootApplication
public class HelloworldApplication implements ApplicationRunner {
    ……
}
注:實際上,註解 @Log4j 會在被註解的類裡面自動生成一行程式碼: private static final org.apache.logging.log4j.Logger log = org.apache.logging.log4j.LogManager.getLogger(LogExample.class); 並引入依賴 import lombok.extern.log4j.Log4j2; 這樣,一個名為log的變數就被自動生成出來了。

這時候,就可以在當前class裡面直接使用log替換之前定義的logger來列印日誌了:

		log.debug("Debugging log");
		log.info("Info log");
		log.warn("Hey, This is a warning!");
		log.error("Oops! We have an Error. OK");
		log.fatal("Damn! Fatal error. Please fix me.");

檢視log

點選Run button或者執行jar,並檢視log。

911c73286f3ad01cdee384df5ba20e54.png