Log4j2 – 同時記錄到文件和控制台
一、概述
在本教程中,我們將探討如何使用 Apache Log4j2 庫將消息記錄到文件和控制台。
這在非生產環境中非常有用,我們可能希望在控制台中查看調試消息,並且我們可能希望將更高級別的日誌保存到文件中以供以後分析。
2. 項目設置
讓我們從創建一個 Java 項目開始。我們將添加 log4j2 依賴項並了解如何配置和使用記錄器。
2.1。 Log4j2 依賴
讓我們將 log4j2 依賴項添加到我們的項目中。我們需要Apache Log4J Core和Apache Log4J API依賴項:
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.18.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.18.0</version>
</dependency>
</dependencies>
2.2.應用類
現在讓我們使用 log4j2 庫向我們的應用程序添加一些日誌記錄:
public class Log4j2ConsoleAndFile {
private static final Logger logger = LogManager.getLogger(Log4j2ConsoleAndFile.class);
public static void main(String[] args) {
logger.info("Hello World!");
logger.debug("Hello World!");
}
}
3.Log4j2配置
要自動配置記錄器,我們需要在類路徑上有一個配置文件。它可以是 JSON、XML、YAML 或屬性格式。該文件應命名為 log4j2。對於我們的示例,讓我們使用一個名為log4j2.properties
的配置文件。
3.1。登錄到控制台
要登錄到任何目的地,我們首先需要定義一個登錄到控制台的附加程序。讓我們看一下執行此操作的配置:
appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
讓我們了解配置的每個組件:
-
appender.console.type
– 在這裡,我們指定將用於記錄的 appender 的類型。類型Console
指定 appender 將只寫入控制台。我們應該注意,鍵名中的console
這個詞只是一個約定,並不是強制性的。 -
appender.console.name –
我們可以給出任何唯一的名稱,以便以後可以用來引用這個 appender。 -
appender.console.layout.type
– 這決定了用於格式化日誌消息的佈局類的名稱。 -
appender.console.layout.pattern
– 這是用於格式化日誌消息的模式。
要啟用控制台記錄器,我們需要將控制台附加程序添加到根記錄器。我們可以使用上面指定的名稱來執行此操作:
rootLogger=debug, STDOUT
使用此配置,我們會將所有debug
和以上消息記錄到控制台。對於在本地環境中運行的控制台, debug
級別的日誌記錄很常見。
3.2.記錄到文件
同樣,我們可以將記錄器配置為記錄到文件中。這對於持久化日誌通常很有用。讓我們定義一個文件附加器:
appender.file.type = File
appender.file.name = LOGFILE
appender.file.fileName=logs/log4j.log
appender.file.layout.type=PatternLayout
appender.file.layout.pattern=[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
appender.file.filter.threshold.type = ThresholdFilter
appender.file.filter.threshold.level = info
對於文件附加程序,還必須指定文件名。
除此之外,我們還要設置閾值級別。由於我們正在記錄到一個文件,我們不想記錄所有消息,因為它會佔用大量的持久存儲。我們只想記錄info
級別或更高級別的消息。我們可以使用過濾器ThresholdFilter
並設置其級別**info.**
要啟用文件記錄器,我們需要將文件附加程序添加到根記錄器。我們需要更改rootLogger
配置以包含文件 appender:
rootLogger=debug, STDOUT, LOGFILE
即使我們在根級別使用了級別debug
,文件記錄器也只會記錄info
及以上消息。
4. 測試
現在讓我們運行應用程序並檢查控制台中的輸出:
12:43:47,891 INFO Application:8 - Hello World!
12:43:47,892 DEBUG Application:9 - Hello World!
正如預期的那樣,我們可以在控制台中看到這兩條日誌消息。如果我們檢查路徑logs/log4j.log
的日誌文件,我們只能看到info
級別的日誌消息:
12:43:47,891 INFO Application:8 - Hello World!
5. 結論
在本文中,我們學習瞭如何將消息記錄到控制台和文件中。我們創建了一個 Java 項目,使用屬性文件配置了 Log4j2,並測試了消息是否打印到控制台和文件。
與往常一樣,完整的源代碼可在 GitHub 上獲得。