我在 slf4j-api 1.7.7 上使用 logback 1.1.3。
我在这里阅读以下文档。
我试图限制日志记录并以下列方式引发异常的代码(我无法修改)。
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}
格式?我不喜欢为此编写自定义记录器。