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

Log4j2主XML与XInclude定义Logger的优先级及合并规则咨询

Log4j2多元素(含XInclude引入)的配置合并规则

核心规则

当通过XInclude将多个配置文件整合成一个完整XML后,Log4j2对多个<Loggers>元素的处理逻辑是后出现的<Loggers>会完全替换之前的所有<Loggers>元素,而非合并其中的单个Logger条目:

  • 最终生效的只有最后一个<Loggers>里的所有配置(包括<Logger>和<Root>);
  • 之前<Loggers>中定义过但未在最后一个<Loggers>里出现的Logger会被移除,代码中调用这类Logger时,Log4j2会自动生成继承自Root的默认Logger,级别与当前生效的Root一致。

场景解析

场景1(s1)

合并后的XML配置顺序是:先加载引入文件的<Loggers>(含myLogger1、myLogger2,级别DEBUG),再加载主文件的<Loggers>(仅含Root,级别INFO)。

由于主文件的<Loggers>是最后出现的,引入文件的<Loggers>被完全替换。此时配置里只有Root Logger,myLogger1和myLogger2没有显式定义,代码调用时会生成继承Root的默认Logger,因此级别显示为INFO。

场景2(s2)

合并后的XML配置顺序是:先加载主文件的<Loggers>(含Root,级别INFO),再加载引入文件的<Loggers>(含myLogger1、myLogger2,级别DEBUG)。

最后生效的是引入文件的<Loggers>,其中的myLogger1、myLogger2保留原有DEBUG级别。若引入文件的<Loggers>未定义Root,Log4j2会保留之前配置的Root(INFO级别)——这是因为新的<Loggers>未覆盖Root条目,原有Root配置继续生效。

相关文档章节

  • Configuration Syntax > XInclude:说明XInclude会将引入内容插入主配置,形成单一XML文档后再解析;
  • Configuration Syntax > Loggers:明确<Loggers>作为日志器容器,解析时后续的容器会覆盖之前的实例。

内容的提问来源于stack exchange,提问作者Walter Butze

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 15:43:17