首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >log4j LogEventPatternConverter -如何只记录格式化的线程堆栈跟踪?

log4j LogEventPatternConverter -如何只记录格式化的线程堆栈跟踪?
EN

Stack Overflow用户
提问于 2021-07-27 07:21:27
回答 2查看 40关注 0票数 0

我用Java语言实现了一个定制的LogEventPatternConverter,它添加了一个新的log4j格式化指令。在我的自定义LogEventPatternConverter中,它会在记录Throwable t时触发我的format方法,例如使用Logger.getLogger(MyClass.class.getSimpleName()).error("Error", t);

代码语言:javascript
运行
复制
@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方法。为什么会这样呢?如何拦截和格式化堆栈跟踪而不记录两次?

EN

回答 2

Stack Overflow用户

发布于 2021-07-27 07:46:24

可能是这样的:

代码语言:javascript
运行
复制
// (getThrown() not null)
Throwable t = event.getThrown();
StringWriter sw = new StringWriter();
t.printStackTrace(new PrintWriter(sw));
toAppendTo.append(sw.toString());
票数 0
EN

Stack Overflow用户

发布于 2021-07-27 08:45:36

我解决了这个问题--在你的模式中使用%throwable{0}来抑制堆栈跟踪的打印。您仍然可以自己在format方法中对其进行格式化和追加。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68537277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档