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

同一包基于Appender类型设置不同日志级别问题求助

问题分析与解决方案

你的配置存在两个核心问题:

  1. 重复定义了同名的com.trenolab.treno4.railml Logger,Logback中重复定义会导致配置逻辑冲突;
  2. 文件Appender没有设置级别过滤,即便Logger级别设为WARN,仍会有不符合级别的日志流入文件。

以下是修正后的完整配置:

<configuration>
    <appender name="my_file_appender" class="ch.qos.logback.core.FileAppender">
        <file>myLog.log</file>
        <encoder>
            <pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n</pattern>
        </encoder>
        <!-- 添加级别过滤器,仅保留WARN及以上级别日志写入文件 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>WARN</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- 全局Root Logger,处理所有包的INFO级别日志到控制台 -->
    <root level="INFO">
        <appender-ref ref="STDOUT"/>
    </root>
    
    <!-- 针对指定包的Logger配置 -->
    <logger name="com.trenolab.treno4.railml" level="INFO" additivity="true">
        <!-- 将该包的日志关联到文件Appender(受过滤器限制仅写入WARN+) -->
        <appender-ref ref="my_file_appender" />
    </logger>
</configuration>

关键修改说明:

  • 移除重复Logger:删掉原配置中第二个com.trenolab.treno4.railml Logger定义,避免逻辑冲突;
  • 文件Appender添加过滤器:通过LevelFilter明确只允许WARN及以上级别的日志写入文件,从根源上拦截INFO级别日志;
  • 统一Logger级别:指定包的Logger级别设为INFO,同时保持additivity="true"(默认值,可省略),确保该包的INFO日志能向上传递到Root Logger,从而通过STDOUT输出到控制台。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 22:35:22