2016-08-05 93 views
1

我正在使用由logback支持的slf4j设置项目。我在程序的根记录异常与Slf4j/logback - 在单独文件中打印堆栈跟踪

logger.error(ex.getMessage(), ex); 

我已经得到的logback配置像这样(减去不重要的东西)

<appender name="FILE" class="ch.qos.logback.core.FileAppender"> 
    <file>app.log</file> 
    <encoder> 
     <pattern>${details}: %msg%n</pattern> 
    </encoder> 
</appender> 

<root> 
    <appender-ref ref="FILE"/> 
</root> 

重要位工作的罚款。我的问题是,尽管%ex没有被包含在我的模式中,但是在错误消息之后,stacktraces无论如何都会被打印为常规sysout样行。

00:23:50.713 ERROR blabla: something happened java.lang.RuntimeException: something happened at ... at ...

因为我希望我的日志很容易解析的,即堆栈跟踪是我的方式(它不适合我的行格式),我不希望它在那里。我想踪迹去一个单独的文件,打印为

<file>stacktrace.log</file> 
<encoder> 
    <pattern>${details}: %ex%n</pattern> 
</encoder> 

我认为这事很明显不是一个的logback臭虫,踪迹oopsie自己的方式进入输出尽管是在图形中不存在。我一直在阅读文档,但似乎无法找到我想要的方法:仅在专用堆栈跟踪日志中打印堆栈跟踪。可以做到吗?

回答

1

我刚刚发现this important nuance文档中:

If you do not specify %xThrowable or another throwable-related conversion word in the conversion pattern, PatternLayout will automatically add it as the last conversion word, on account of the importance of stack trace information. The $nopex conversion word can be substituted for %xThrowable, if you do not wish stack trace information to be displayed. See also the %nopex conversion word.

考虑到这一点,这是对一个异常,这样的存在只是简单的过滤。

0

一个有效的解决方法是将一个名为STACKTRACE的标记添加到我的所有异常日志中,然后在我的配置中过滤该标记,但这只是一种解决方法。

或者将错误级别的消息过滤到单独的日志中,但感觉就像它没有映射1:1来过滤堆栈跟踪。