如何限制原木堆栈跟踪显示?

问题描述 投票:0回答:1

我使用的logback 1.1.3在SLF4J的API 1.7.7。

我在读下面的文档here

该代码(这我不能修改),我试图以限制日志记录,并抛出下列方式异常。

try {.. }
catch( Exception e ) {
  log.error( "Houston we have a problem", e );
  throw new TestException( "Houston we have a problem", e );
}

我使用的日志格式如下。

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <layout class="ch.qos.logback.classic.PatternLayout">
        <Pattern>
            %d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger{36} - %msg%n
        </Pattern>
    </layout>
</appender>

我想一些记录器来限制他们的堆栈跟踪的只是2线的显示,所以我想我可以简单地修改为以下格式的文件中规定。

<appender name="STDOUT_COMPACT" class="ch.qos.logback.core.ConsoleAppender">
    <layout class="ch.qos.logback.classic.PatternLayout">
        <Pattern>
            %ex{2} %d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger{36} - %msg%n
        </Pattern>
    </layout>
</appender>

我期待得到的东西像下面这样。

mainPackage.foo.bar.TestException: Houston we have a problem
  at mainPackage.foo.bar.TestThrower.fire(TestThrower.java:22)

但是,相反,我得到以下。

mainPackage.foo.bar.TestException: Houston we have a problem
  at mainPackage.foo.bar.TestThrower.fire(TestThrower.java:22)
mainPackage.foo.bar.TestException: Houston we have a problem
  at mainPackage.foo.bar.TestThrower.fire(TestThrower.java:22)
  at mainPackage.foo.bar.TestThrower.fire1(TestThrower.java:12)
  at mainPackage.foo.bar.TestThrower.fire2(TestThrower.java:44)
  at mainPackage.foo.bar.TestThrower.fire3(TestThrower.java:122)
  at mainPackage.foo.bar.TestThrower.fire4(TestThrower.java:322)
  at mainPackage.foo.bar.TestThrower.fire5(TestThrower.java:72)
  ..

该日志被简单地重复,而不是被截断到只有2行。我究竟做错了什么?究竟如何恰当地使用ex{n}格式?我不喜欢写我的这个自定义记录。

logback slf4j slf4j-api
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.