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

Logback多级别日志多追加器配置问题:新增LogB不影响LogA

解决Logback新增DEBUG日志文件不干扰原有日志的问题

你遇到的问题核心是Logback的**日志传递性(additivity)**在搞鬼!默认情况下,子Logger的日志事件会向上传递给父Logger(包括root),而你的root已经绑定了logA,所以新增的DEBUG日志会顺着传递链再被logA写一遍。

解决方案:关闭新增Logger的日志传递性

只需要给你新增的<logger>标签加上additivity="false"属性,就能阻止它的日志向上传递,这样logB只会接收这些DEBUG日志,而logA完全不受影响。

完整配置示例

首先是logB的Appender配置(这里用最常用的滚动文件输出为例,你可以根据自己的需求调整):

<appender name="logB" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <!-- 日志文件路径 -->
    <file>logs/logB.log</file>
    <!-- 滚动策略:按时间+大小分割 -->
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
        <fileNamePattern>logs/logB.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
        <maxFileSize>100MB</maxFileSize>
        <maxHistory>30</maxHistory>
        <totalSizeCap>1GB</totalSizeCap>
    </rollingPolicy>
    <!-- 日志格式 -->
    <encoder>
        <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
    <!-- 可选:严格过滤只保留DEBUG级别日志(如果需要精准只存DEBUG) -->
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>DEBUG</level>
        <onMatch>ACCEPT</onMatch>
        <onMismatch>DENY</onMismatch>
    </filter>
</appender>

然后是关键的Logger配置,加上additivity="false":

<logger name="A" level="DEBUG" additivity="false">
    <appender-ref ref="logB" />
</logger>

为什么这样有效?

  • additivity="false":这个属性会关闭当前Logger的日志传递功能,它处理完的日志(输出到logB)不会再传递给父级Logger(包括root),自然就不会被logA重复写入了。
  • 原有logA的所有配置完全不需要修改:root Logger依然按照原来的规则收集日志,各个子Logger(A.B、A.C等)的级别设置也保持不变,不会受到logB的影响。

额外说明

如果你的需求是收集整个应用所有包的DEBUG日志,而不只是A包下的,只需要把Logger的name改为空字符串:

<logger name="" level="DEBUG" additivity="false">
    <appender-ref ref="logB" />
</logger>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 18:17:50