如何在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
相关产品推荐
相关产品推荐

