繁体   English   中英

log4j LogEventPatternConverter - 如何仅记录格式化的 Throwable 堆栈跟踪?

[英]log4j LogEventPatternConverter - how to log only formatted Throwable stack trace?

我在 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方法。 这是为什么? 如何在不记录两次的情况下拦截和格式化堆栈跟踪?

也许是这样的:

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

我想通了 - 在您的模式中使用%throwable{0}来抑制堆栈跟踪的打印。 您仍然可以在format方法中自己格式化和附加它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM