log4j logeventpatternconverter-如何格式化可丢弃堆栈跟踪?

xqnpmsa8  于 2021-09-13  发布在  Java
关注(0)|答案(2)|浏览(227)

我在java中实现了一个定制的logeventpatternconverter,它添加了一个新的log4j格式化指令。在我的自定义logeventpatternconverter中,它正在启动我的 format 方法当一个可丢弃的 t 已记录,例如,使用 Logger.getLogger(MyClass.class.getSimpleName()).error("Error", t); ```
@Override
public void format(LogEvent event, StringBuilder toAppendTo) {
if (event.getThrown() != null) {
toAppendTo.append("This is a throwable");
} else {
toAppendTo.append(event.getMessage());
}
}

在我的日志输出中,我看到记录了“this is a throwable”,但随后也记录了throwable的堆栈跟踪,显然没有通过我的日志 `format` 方法。为什么呢?如何在不记录两次堆栈跟踪的情况下拦截并格式化堆栈跟踪?
xkftehaa

xkftehaa1#

可能是这样的:

// (getThrown() not null)
Throwable t = event.getThrown();
StringWriter sw = new StringWriter();
t.printStackTrace(new PrintWriter(sw));
toAppendTo.append(sw.toString());
zbwhf8kr

zbwhf8kr2#

我想出来了——用吧 %throwable{0} 在模式中,以抑制堆栈跟踪的打印。您仍然可以自己将其格式化并附加到 format 方法。

相关问题