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 的更多详细信息,请参阅其 手册