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

Logback如何为同一logger配置info、trace两个级别相同的输出规则

Logback Logger多级别输出配置方案

问题原因

Logback不支持为同一个name的Logger配置多条独立规则,重复定义同name的Logger时,仅最后加载的配置会生效,因此你配置两条name="com.mypack"的Logger无法达到预期效果。

可行配置方案

根据你的实际需求选择对应方案即可:

方案1:需要输出com.mypack下所有trace及以上级别的日志(包含trace、debug、info、warn、error)

Logback的日志级别优先级为trace < debug < info < warn < error,配置的level为最低输出门槛,所有大于等于该级别的日志都会按当前Logger的规则输出。你只需要将com.mypack的Logger级别直接设置为trace,info级别日志自然会和trace级别使用完全相同的输出规则:

<logger name="com.mypack" level="trace" additivity="false">
    <appender-ref ref="CLOUD" />
    <appender-ref ref="RollingFile" />
    <appender-ref ref="STDOUT" />
</logger>
 
<logger name="TrackingLog" level="info" additivity="false">
    <appender-ref ref="CLOUD" />
    <appender-ref ref="RollingFile" />
    <appender-ref ref="STDOUT" />
</logger>
 
 
<logger name="PostBackLog" level="info" additivity="false">
    <appender-ref ref="CLOUD" />
    <appender-ref ref="RollingFile" />
    <appender-ref ref="STDOUT" />
</logger>
 
<root level="error" includeLocation="true">
   <appender-ref ref="CLOUD" />
   <appender-ref ref="RollingFile" />
   <appender-ref ref="STDOUT" />
</root>

方案2:仅需要输出com.mypack下的trace和info级别,过滤其他级别

如果不需要输出debug、warn、error等其他级别,可以给com.mypack关联的Appender添加级别过滤器,精准放行指定级别。为了不影响其他Logger的输出规则,建议单独为com.mypack定义一套带过滤逻辑的Appender:

<!-- 示例:定义com.mypack专用的控制台输出Appender,CLOUD、RollingFile类型的Appender同理配置 -->
<appender name="STDOUT_MYPACK" class="ch.qos.logback.core.ConsoleAppender">
    <!-- 原有编码器、格式化规则保持和原STDOUT Appender一致 -->
    <encoder>
        <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
    </encoder>
    <!-- 放行trace级别 -->
    <filter class="ch.qos.logback.core.filter.LevelFilter">
        <level>TRACE</level>
        <onMatch>ACCEPT</onMatch>
        <onMismatch>NEUTRAL</onMismatch>
    </filter>
    <!-- 放行info级别 -->
    <filter class="ch.qos.logback.core.filter.LevelFilter">
        <level>INFO</level>
        <onMatch>ACCEPT</onMatch>
        <onMismatch>NEUTRAL</onMismatch>
    </filter>
    <!-- 其他所有级别直接拒绝 -->
    <filter class="ch.qos.logback.core.filter.DenyAllFilter"/>
</appender>

<!-- 按同样逻辑配置CLOUD_MYPACK、RollingFile_MYPACK两个Appender -->
<!-- <appender name="CLOUD_MYPACK" ...>...</appender> -->
<!-- <appender name="RollingFile_MYPACK" ...>...</appender> -->

<logger name="com.mypack" level="trace" additivity="false">
    <appender-ref ref="CLOUD_MYPACK" />
    <appender-ref ref="RollingFile_MYPACK" />
    <appender-ref ref="STDOUT_MYPACK" />
</logger>
 
<logger name="TrackingLog" level="info" additivity="false">
    <appender-ref ref="CLOUD" />
    <appender-ref ref="RollingFile" />
    <appender-ref ref="STDOUT" />
</logger>
 
 
<logger name="PostBackLog" level="info" additivity="false">
    <appender-ref ref="CLOUD" />
    <appender-ref ref="RollingFile" />
    <appender-ref ref="STDOUT" />
</logger>
 
<root level="error" includeLocation="true">
   <appender-ref ref="CLOUD" />
   <appender-ref ref="RollingFile" />
   <appender-ref ref="STDOUT" />
</root>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 06:54:04