jsonlayout log4j2 時間問題_Java Web開發入門(8)—— lombok + Log4j2
阿新 • • 發佈:2021-02-11
在上一篇中講述瞭如何在工程中配置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。