Log4J2簡介
日誌就是記錄程式執行的系統資訊和業務資訊。當系統出現線上故障時通常會透過ELK查詢日誌定位問題。
JavaCore整合Log4j2在使用之前需要整合到java-core專案中,也就是將log4j2的maven依賴配置到java-core的pom.xml檔案中。
Log4j2在java-core專案中的使用在將log4j2整合到java-core專案後,就可以用來記錄程式的日誌資訊。
log4j2的使用非常簡單,只需要在使用類中建立一個org.apache.logging.log4j.Logger物件,然後在方法中呼叫該物件提供的方法即可。
當程式執行時Log4j2會讀取預設的配置檔案,該檔案的作用是預設情況下Log4j2只會按照指定的格式將error級別的日誌輸出到控制檯中。
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN"> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </Console> </Appenders> <Loggers> <Root level="error"> <AppenderRef ref="Console"/> </Root> </Loggers> </Configuration>
Log4j2中的日誌級別按照從高到低的優先順序排序一共有八個:OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL
All:最低等級的,用於開啟所有日誌記錄.Trace:是追蹤,就是程式推進以下,你就可以寫個trace輸出,所以trace應該會特別多,不過沒關係,我們可以設定最低日誌級別不讓他輸出.Debug:指出細粒度資訊事件對除錯應用程式是非常有幫助的.Info:訊息在粗粒度級別上突出強調應用程式的執行過程.Warn:輸出警告及warn以下級別的日誌.Error:輸出錯誤資訊日誌.Fatal:輸出每個嚴重的錯誤事件將會導致應用程式的退出的日誌.OFF:最高等級的,用於關閉所有日誌記錄.org.apache.logging.log4j.Logger類針對8個日誌級別封裝了8個方法以及其他過載的方法
程式會列印高於或等於所設定級別的日誌,設定的日誌等級越高,打印出來的日誌就越少。日常專案開發中日誌不是列印越多越好,它的作用本身就是為了幫我們更加精準的定位問題,因為日誌列印和程式一樣也會佔據磁碟IO,網路,CPU,記憶體等硬體資源。通常線上環境常用Info列印系統業務日誌,Error列印系統異常日誌。本地環境和測試環境可以列印Debug日誌。
一般開發專案時都會自己去定義一個log4j2.xml檔案去覆蓋預設的配置,log4j2.xml檔案必須放在src/main/resouce目錄下
我這裡準備了一個log4j2.xml檔案,該檔案只能用於控制檯輸出。並且每個節點的配置都已經給出了詳細的註釋說明。
在進行專案開發時不會使用System.out.println()列印輸出語句,而使用org.apache.logging.log4j.Logger物件的方法替代。不過日誌不僅僅是輸出在控制檯,在公司使用SpringBoot開發應用時,使用者透過java應用程式的Slf4j寫入日誌,SpringBoot預設使用的是logback。我們透過實現自定義的Appender將日誌寫入Kafka,同時Logstash透過input外掛操作Kafka訂閱其對應的主題。當有日誌輸出後被Kafka的客戶端Logstash所收集,經過相關過濾操作後將日誌寫入Elasticsearch,此時使用者可以透過Kibana獲取Elasticsearch中的日誌資訊。
Log4j2與Lombok整合Lombok官網
Lombok提供了一些註解用於生成常用的方法,在編譯時將帶有Lombok註解的Java檔案正確編譯成完整的class檔案。目前IDEA2020.3商業版中已經將Lombok作為自帶外掛整合,如果在IDEA2020.3以後的版本無序額外安裝外掛就可以使用。
但是要使用Lombok提供的一些註解,還需要引用Lombok的Maven依賴
IDEA中會提示log等價於之前手動建立的org.apache.logging.log4j.Logger物件