作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
对于从不同站点调用的方法中很少出现的情况,我希望在日志中包含堆栈跟踪。异常情况是通过异常来检测的,即没有try-catch。
我知道的唯一方法是使用假异常,如下所示:
static void logWithStacktrace(Logger logger, Priority p, String msg) {
try {
throw new AssertionError();
} catch (AssertionError e) {
logger.log(p, msg, e);
}
}
有没有一种好的方法可以在不引发异常的情况下做到这一点?也许有一个我忽略的 log4j 功能?我正在寻找一种解决方案,将堆栈跟踪格式化为真正的异常消息 - 理想情况下它最终会成为 <log4j:throwable>
XML 日志文件中的元素。使用Thread.getStackTrace
我自己格式化它不允许我这样做。
我知道“很少发生”的代码需要重构以使用异常。另一方面,我对异常所做的就是记录它们,因为问题并不是真正的错误,而是表明 API 使用有问题。所以不直接记录它们似乎有点人为。
最佳答案
几个 log4j 方法接受 Throwable 对象。 Throwable 包含其线程在创建时的执行堆栈的快照。您应该能够按如下方式使用它:
static void logWithStacktrace(Logger logger, Priority p, String msg) {
logger.log(p, msg, new Exception());
}
关于java - 如何在 catch 子句之外记录堆栈跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24490636/
我是一名优秀的程序员,十分优秀!