如何配置log4j以不打印异常堆栈跟踪?

Thi*_*ilo 19 logging log4j exception

我们使用Log4j(和Commons Logging)来记录我们的错误消息.现在我们要设置一个额外的日志追加器,将致命错误输出到syslog,但没有特别长的Java堆栈跟踪(这些仍将在完整的日志文件中提供).

如何配置它(使用log4j.xml)?是否有可用于忽略堆栈跟踪的过滤器?

kdg*_*ory 17

阅读更多来源后编辑:

你仍然需要继承PatternLayout,但你要覆盖的方法是ignoresThrowable():它应该返回false,这将阻止appender写入Throwable(它假设布局已经这样做了).

无法在配置中指定此项:PatternLayout具有硬编码"return true".

  • 好的,可以了,谢谢。太糟糕了,这不是 log4j 的配置选项。我想知道为什么这与 PatternLayout 可用的其他选项有如此大的不同。对我来说似乎是一个自然的格式选项...... (2认同)

Tot*_*ach 10

这是我使用的实际代码:

import org.apache.log4j.PatternLayout;

public class NoStackTracePatterLayout extends PatternLayout {

 @Override
 public boolean ignoresThrowable(){
  return false;
 }
}
Run Code Online (Sandbox Code Playgroud)


bou*_*mbh 7

如果使用log4j> 1.2.16,则可以使用EnhancedPatternLayout布局.

示例(使用log4j.properties文件),将其定义为appender的布局,然后添加%throwable{0}转换模式:

log4j.appender.XXX.layout=org.apache.log4j.EnhancedPatternLayout
log4j.appender.XXX.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c:%L - %m%n%throwable{0}
Run Code Online (Sandbox Code Playgroud)


Jav*_*ier 5

在1.2.16中,您可以使用EnhancedPatternLayout