You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在properties文件中配置带多个AppenderRef的RewriteAppender?

Log4j2 RewriteAppender 多Appender转发 Properties配置解决方案

要实现RewriteAppender修改日志事件后转发给多个目标Appender,properties配置需遵循Log4j2的数组属性配置规则,以下是正确配置方式及错误原因解析:

正确配置示例

# 定义目标Appender(示例:控制台与文件输出)
appender.stdout.type = Console
appender.stdout.name = stdout
appender.stdout.layout.type = PatternLayout
appender.stdout.layout.pattern = %d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n

appender.file.type = File
appender.file.name = file
appender.file.fileName = logs/app.log
appender.file.layout.type = PatternLayout
appender.file.layout.pattern = %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n

# 定义RewriteAppender及重写策略
appender.rewrite.type = Rewrite
appender.rewrite.name = rewrite
# 示例:使用MapRewritePolicy添加自定义字段,可替换为其他重写策略
appender.rewrite.policy.type = MapRewritePolicy
appender.rewrite.policy.key = customTag
appender.rewrite.policy.value = processedByRewrite

# 关键:用索引语法配置多个AppenderRef
appender.rewrite.appenderRef.$1.ref = stdout
appender.rewrite.appenderRef.$2.ref = file

# 关联RewriteAppender到根日志器
logger.root.level = info
logger.root.appenderRef.rewrite.ref = rewrite

错误原因解析

你之前的配置采用了嵌套命名(appender.rewrite.appenderRefs.stdout)的方式,这不符合Log4j2 Properties配置的数组属性规则:

  • RewriteAppender的appenderRefs是AppenderRef数组类型,在properties配置中需通过$N索引语法(如$1、$2)逐个定义元素,框架会自动将这些元素收集为数组赋值给appenderRefs。
  • 手动指定appender.rewrite.appenderRefs.type = AppenderRef是错误的,因为appenderRefs是数组而非单个AppenderRef实例,这会导致框架无法解析配置,抛出ConfigurationException。

内容的提问来源于stack exchange,提问作者William Denton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 18:40:14