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

Logback使用ex{depth}限制栈追踪时如何省略重复栈帧?

问题:Logback限制栈追踪行数时如何保留重复栈帧省略功能?

我正在调试Logback的日志格式,想要创建仅打印栈追踪前3行的格式。默认情况下Logback会自动省略重复栈帧,但使用%ex{depth}模式限制栈追踪行数时,该省略功能失效了,且未找到对应配置项。使用的Logback版本为1.2.11。


示例代码与配置

Java测试类

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class TestLog {

    private static final Logger LOGGER = LoggerFactory.getLogger(TestLog.class);

    public static void main(String[] args) {
        try {
            ex1();
        } catch (Exception e) {
            LOGGER.debug("foobar", e);
        }
    }

    static void ex1() {
        ex2();
    }

    static void ex2() {
        ex3();
    }

    static void ex3() {
        ex4();
    }

    static void ex4() {
        throw new IllegalStateException("ex in 4", new IllegalArgumentException("cause of ex in 4"));
    }

}

Logback配置文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <!-- 限制每个异常栈追踪为3行,但不会省略重复帧的配置 -->
<!--            <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p [%15.15thread] %-20.20logger{19} : %m %ex{3}%nopex%n</Pattern>-->
            <!-- 默认配置,会省略重复帧 -->
            <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p [%15.15thread] %-20.20logger{19} : %m%n</Pattern>
        </encoder>
    </appender>

    <root level="debug">
        <appender-ref ref="STDOUT" />
    </root>

</configuration>

输出对比

默认配置下的输出

2022-07-29 10:38:08.184 DEBUG [           main] TestLog              : foobar
java.lang.IllegalStateException: ex in 4
    at TestLog.ex4(TestLog.java:29)
    at TestLog.ex3(TestLog.java:25)
    at TestLog.ex2(TestLog.java:21)
    at TestLog.ex1(TestLog.java:17)
    at TestLog.main(TestLog.java:10)
Caused by: java.lang.IllegalArgumentException: cause of ex in 4
    ... 5 common frames omitted

启用行数限制后的输出

2022-07-29 10:37:45.002 DEBUG [           main] TestLog              : foobar java.lang.IllegalStateException: ex in 4
    at TestLog.ex4(TestLog.java:29)
    at TestLog.ex3(TestLog.java:25)
    at TestLog.ex2(TestLog.java:21)
Caused by: java.lang.IllegalArgumentException: cause of ex in 4
    at TestLog.ex4(TestLog.java:29)
    at TestLog.ex3(TestLog.java:25)
    at TestLog.ex2(TestLog.java:21)

提问

如何在使用%ex{depth}模式限制栈追踪行数的同时,保留Logback默认的重复栈帧省略功能?


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 13:48:19