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

Log4j2配置多Root Appender导致日志重复输出问题如何解决?

问题描述

在应用中使用Log4j2时,配置了两个RollingFile Appender,二者均输出至同一文件${sys:catalina.base}/test.log,且都关联到Root Logger,导致每条日志内容重复打印两次。

配置代码如下:

<RollingFile name="service1" fileName="${sys:catalina.base}/test.log" filePattern="----works-----">
    <PatternLayout pattern="----works as expected-----" />
    <Policies>
        <SizeBasedTriggeringPolicy size="100MB" />
    </Policies>
    <DefaultRolloverStrategy max="10" />
</RollingFile>

<RollingFile name="service2" fileName="${sys:catalina.base}/test.log" filePattern="-----works------">
    <PatternLayout pattern="----works as expected" />
    <Policies>
        <SizeBasedTriggeringPolicy size="100MB" />
    </Policies>
    <DefaultRolloverStrategy max="10" />
</RollingFile>

<Root level="info"> 
    <AppenderRef ref="service1"/>
    <AppenderRef ref="service2" />
</Root>

日志输出示例:

Debugging data1
Debugging data1
Debugging data2
Debugging data2
解决方案
  • 删除重复的Appender配置:保留其中一个RollingFile Appender(比如service1),删除另一个(service2)的完整配置,同时在Root Logger的<AppenderRef>节点中移除对应的引用。修改后的配置示例:
<RollingFile name="service1" fileName="${sys:catalina.base}/test.log" filePattern="----works-----">
    <PatternLayout pattern="----works as expected-----" />
    <Policies>
        <SizeBasedTriggeringPolicy size="100MB" />
    </Policies>
    <DefaultRolloverStrategy max="10" />
</RollingFile>

<Root level="info"> 
    <AppenderRef ref="service1"/>
</Root>
  • 合并需求到单个Appender:如果原本想通过两个Appender实现不同的日志格式或滚动策略,但最终要输出到同一文件,应将这些需求整合到单个Appender中,不要为同一输出文件配置多个Appender并关联到同一个Logger。

原因说明

Root Logger会将接收到的每一条日志事件分发给所有关联的Appender,两个Appender都指向同一个文件,自然会导致每条日志被重复写入两次。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 00:55:32