【发布时间】:2014-06-30 22:05:43
【问题描述】:
对于从不同站点调用的方法中很少发生的情况,我希望在日志中包含堆栈跟踪。异常情况注意通过异常检测,即没有try-catch。
我知道的唯一方法是使用假异常,如下所示:
static void logWithStacktrace(Logger logger, Priority p, String msg) {
try {
throw new AssertionError();
} catch (AssertionError e) {
logger.log(p, msg, e);
}
}
有没有不引发异常的好方法?也许我忽略了一个 log4j 功能?我正在寻找一种将堆栈跟踪格式化为真实异常消息的解决方案 - 理想情况下,它最终会作为 XML 日志文件中的 <log4j:throwable> 元素。使用 Thread.getStackTrace 并自己格式化它不会让我这样做。
我知道“很少发生”类型的尖叫需要重构代码以使用异常。另一方面,我对异常所做的只是记录它们,因为问题并不是真正的错误,而是表明 API 使用存在问题。所以不直接记录它们似乎有点做作。
【问题讨论】: