Apache ActiveMQ Artemis 使用 SLF4J 記錄外觀進行記錄,代理程式組件提供 Log4J 2 作為記錄實作。當透過執行 run 命令啟動代理程式時,可透過代理程式實例 etc 目錄中的 log4j2.properties 檔案進行設定,該檔案預設設定為記錄到主控台和檔案。對於其他 CLI 命令,可透過代理程式實例 etc 目錄中的 log4j2-utility.properties 檔案進行設定,該檔案預設設定為僅將錯誤記錄到主控台(除了通常的命令輸出外)。

有一些可用的通用記錄器

記錄器 描述

rootLogger

記錄 Apache ActiveMQ Artemis 記錄器未處理的任何呼叫

org.apache.activemq.artemis.core.server

記錄核心伺服器

org.apache.activemq.artemis.utils

記錄工具呼叫

org.apache.activemq.artemis.journal

記錄日誌呼叫

org.apache.activemq.artemis.jms

記錄 JMS 呼叫

org.apache.activemq.artemis.integration.bootstrap

記錄啟動呼叫

org.apache.activemq.audit.base

稽核記錄。預設停用

org.apache.activemq.audit.resource

資源稽核記錄。預設停用

org.apache.activemq.audit.message

訊息稽核記錄。預設停用

1. 設定記錄器的特定級別

有時需要從特定記錄器取得更詳細的記錄。例如,當您嘗試排除問題時。假設您需要從記錄器 org.foo 取得 TRACE 記錄。

然後您需要將 org.foo 記錄器的記錄級別設定為 TRACE,例如

logger.my_logger_ref.name=org.foo
logger.my_logger_ref.level=TRACE

2. 重新載入設定

Log4J2 有自己的設定檔重新載入機制,該機制本身是透過相同的 log4j2.properties 設定檔進行設定的。若要啟用設定更新時重新載入,請將 monitorInterval 設定屬性設定為應監控檔案更新的間隔(以秒為單位),例如

# Monitor config file every 5 seconds for updates
monitorInterval = 5

3. 在客戶端應用程式中記錄

首先,如果您想在客戶端啟用記錄,您需要在您的應用程式中包含支援 SLF4J 外觀的記錄實作。以 Log4J2 作為記錄實作為例,由於它由代理程式使用,因此當使用 Maven 時,您的客戶端和記錄相依性可能如下所示,例如:

<dependency>
   <groupId>org.apache.activemq</groupId>
   <artifactId>artemis-jms-client</artifactId>
   <version>2.38.0</version>
</dependency>
<dependency>
   <groupId>org.apache.logging.log4j</groupId>
   <artifactId>log4j-slf4j2-impl</artifactId>
   <version>2.24.1</version>
</dependency>

然後可以透過類別路徑中名為 log4j2.properties 的檔案提供 Log4J2 設定,該檔案將會自動拾取。

或者,可以使用系統屬性 log4j2.configurationFile 設定特定設定檔的使用,例如:

-Dlog4j2.configurationFile=file:///path/to/custom-log4j2-config.properties

以下是客戶端應用程式的 log4j2.properties 範例,以 INFO 級別記錄到主控台和每日滾動檔案。

# Log4J 2 configuration

# Monitor config file every X seconds for updates
monitorInterval = 5

rootLogger.level = INFO
rootLogger.appenderRef.console.ref = console
rootLogger.appenderRef.log_file.ref = log_file

logger.activemq.name=org.apache.activemq
logger.activemq.level=INFO

# Console appender
appender.console.type=Console
appender.console.name=console
appender.console.layout.type=PatternLayout
appender.console.layout.pattern=%d %-5level [%logger] %msg%n

# Log file appender
appender.log_file.type = RollingFile
appender.log_file.name = log_file
appender.log_file.fileName = log/application.log
appender.log_file.filePattern = log/application.log.%d{yyyy-MM-dd}
appender.log_file.layout.type = PatternLayout
appender.log_file.layout.pattern = %d %-5level [%logger] %msg%n
appender.log_file.policies.type = Policies
appender.log_file.policies.cron.type = CronTriggeringPolicy
appender.log_file.policies.cron.schedule = 0 0 0 * * ?
appender.log_file.policies.cron.evaluateOnStartup = true

4. 設定代理程式稽核記錄

有 3 個稽核記錄器可以單獨啟用,並稽核不同類型的代理程式事件,它們是

  1. base:這是一個非常詳細的記錄器,將會捕捉 JMX Bean 上發生的大多數事件。

  2. resource:這會記錄資源(例如位址和佇列)以及驗證的建立、更新和刪除。其主要目的是追蹤主控台活動和對代理程式的存取。

  3. message:這會記錄訊息的生產和消費。

所有額外的記錄都會對效能產生負面影響。效能影響是否「過大」將取決於您的使用案例。

這三個稽核記錄器預設在代理程式 log4j2.properties 設定檔中停用

...
# Audit loggers: to enable change levels from OFF to INFO
logger.audit_base.name = org.apache.activemq.audit.base
logger.audit_base.level = OFF
logger.audit_base.appenderRef.audit_log_file.ref = audit_log_file
logger.audit_base.additivity = false

logger.audit_resource.name = org.apache.activemq.audit.resource
logger.audit_resource.level = OFF
logger.audit_resource.appenderRef.audit_log_file.ref = audit_log_file
logger.audit_resource.additivity = false

logger.audit_message.name = org.apache.activemq.audit.message
logger.audit_message.level = OFF
logger.audit_message.appenderRef.audit_log_file.ref = audit_log_file
logger.audit_message.additivity = false
...

若要啟用稽核記錄,請將級別變更為 INFO,如下所示

logger.audit_base.level = INFO
...
logger.audit_resource.level = INFO
...
logger.audit_message.level = INFO

這 3 個稽核記錄器可以單獨停用/啟用。

啟用後,所有稽核記錄都會寫入單獨的記錄檔(預設為 audit.log)。

5. 關於 Log4J2 設定的更多資訊:

有關設定 Log4J 2 的更多詳細資訊,請參閱其手冊