我们使用Log4j(和Commons Logging)来记录我们的错误消息.现在我们要设置一个额外的日志追加器,将致命错误输出到syslog,但没有特别长的Java堆栈跟踪(这些仍将在完整的日志文件中提供).
如何配置它(使用log4j.xml)?是否有可用于忽略堆栈跟踪的过滤器?
阅读更多来源后编辑:
你仍然需要继承PatternLayout,但你要覆盖的方法是ignoresThrowable():它应该返回false,这将阻止appender写入Throwable(它假设布局已经这样做了).
无法在配置中指定此项:PatternLayout具有硬编码"return true".
这是我使用的实际代码:
import org.apache.log4j.PatternLayout; public class NoStackTracePatterLayout extends PatternLayout { @Override public boolean ignoresThrowable(){ return false; } }
如果使用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}
在1.2.16中,您可以使用EnhancedPatternLayout