我用Java语言实现了一个定制的LogEventPatternConverter,它添加了一个新的log4j格式化指令。在我的自定义LogEventPatternConverter中,它会在记录Throwable t
时触发我的format
方法,例如使用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
方法。为什么会这样呢?如何拦截和格式化堆栈跟踪而不记录两次?
发布于 2021-07-27 07:46:24
可能是这样的:
// (getThrown() not null)
Throwable t = event.getThrown();
StringWriter sw = new StringWriter();
t.printStackTrace(new PrintWriter(sw));
toAppendTo.append(sw.toString());
发布于 2021-07-27 08:45:36
我解决了这个问题--在你的模式中使用%throwable{0}
来抑制堆栈跟踪的打印。您仍然可以自己在format
方法中对其进行格式化和追加。
https://stackoverflow.com/questions/68537277
复制相似问题