Apache Artemis 2.17 日志轮转配置不生效与启动异常排查
配置错误原因
- 你当前使用的
org.jboss.logmanager.handlers.PeriodicRotatingFileHandler是纯时间周期轮转的日志处理器,本身仅支持按时间规则轮转,不提供rotateSize、maxBackupIndex、rotateOnBoot这类大小轮转相关的属性,所以启动时会抛出No property "rotateSize" setter found的异常。 - 你之前配置的大小轮转规则未生效,也是因为该处理器本身不支持按大小触发轮转,同时官方文档也明确说明
max-backup-index仅对大小轮转策略生效,时间轮转模式下无法通过该配置自动清理历史日志。
实现预期日志轮转效果的方案
你需要实现「每小时轮转一次、仅保留最近3份日志、自动清理旧日志」的需求,可选择以下两种方案:
方案1:更换支持双规则轮转的日志处理器
将日志处理器更换为org.jboss.logmanager.handlers.PeriodicSizeRotatingFileHandler,该处理器同时支持时间周期+文件大小两种轮转规则,调整后的FILE处理器配置如下:
# File handler configuration handler.FILE=org.jboss.logmanager.handlers.PeriodicSizeRotatingFileHandler handler.FILE.level=DEBUG handler.FILE.properties=suffix,append,autoFlush,fileName,rotateSize,maxBackupIndex,rotateOnBoot # 按每小时轮转配置后缀 handler.FILE.suffix=.yyyy-MM-dd-HH # 若不需要按大小触发轮转,可设置超大阈值避免大小轮转触发,示例为100GB handler.FILE.rotateSize=107374182400 handler.FILE.maxBackupIndex=3 handler.FILE.rotateOnBoot=true handler.FILE.append=true handler.FILE.autoFlush=true handler.FILE.fileName=${artemis.instance}/log/artemis.log handler.FILE.formatter=PATTERN
如果审计日志也需要同样的轮转规则,同步修改AUDIT_FILE处理器的配置即可。
方案2:使用系统logrotate工具管理日志
无需修改Artemis本身的日志配置,直接使用Linux系统自带的logrotate工具实现日志轮转与清理,新增配置文件/etc/logrotate.d/artemis,内容参考如下:
<你的Artemis实例路径>/log/artemis.log <你的Artemis实例路径>/log/audit.log { hourly rotate 3 missingok notifempty copytruncate compress }
该配置会每小时执行一次轮转,保留最近3份日志,自动压缩并清理超出数量的旧日志。
内容的提问来源于stack exchange,提问作者Tim
相关产品推荐
相关产品推荐

