Log4j2 JSON配置:根日志器配置多个AppenderRef的方法
解决Log4j JSON配置中根日志器多AppenderRef无效的问题
我之前也踩过这个一模一样的坑!你遇到的问题大概率是因为对Log4j 2 JSON配置的AppenderRef数组结构理解有偏差,虽然官方文档的示例不多,但正确的写法其实很明确:
正确的多AppenderRef配置格式
要让STDOUT和FILEOUT两个Appender同时生效,你需要把AppenderRef的值定义为对象数组,每个元素对应一个Appender的引用。完整的配置示例如下:
{ "configuration": { "status": "warn", "appenders": { // 定义STDOUT控制台Appender "Console": { "name": "STDOUT", "PatternLayout": { "pattern": "%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n" } }, // 定义FILEOUT文件Appender "File": { "name": "FILEOUT", "fileName": "./application.log", "PatternLayout": { "pattern": "%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n" } } }, "loggers": { "root": { "level": "error", // 这里是关键:AppenderRef是一个对象数组 "AppenderRef": [ {"ref": "STDOUT"}, {"ref": "FILEOUT"} ] } } } }
你可能踩的坑
- 错误地把ref做成数组:
很多人会误写成下面这样,这是完全错误的——Log4j要求每个AppenderRef是独立的对象,而不是把多个ref放在同一个对象的数组里,这种写法只会让Log4j识别最后一个ref值:// 错误写法! "root": { "level": "error", "AppenderRef": { "ref": ["STDOUT", "FILEOUT"] } } - 配置层级错误:
确保你的root日志器配置嵌套在loggers节点下,整个配置包裹在configuration根节点内——如果层级不对,Log4j加载时会忽略部分配置。 - 大小写错误:
Log4j 2的JSON配置键名是大小写敏感的,必须写AppenderRef(首字母大写,Ref结尾),不能写成appenderRef或者appenderrefs。
验证配置是否生效
你可以在配置里加上"status": "debug",启动应用后查看Log4j的初始化日志,确认两个Appender都被成功加载并关联到根日志器。
内容的提问来源于stack exchange,提问作者mikeb
相关产品推荐
相关产品推荐

