2

可能重复:
我如何在 java 中将堆栈跟踪添加到我的调试打印输出中

当没有异常时,在log4j的输出中包含堆栈跟踪的最佳方法是什么?我能想到的唯一方法是创建一个新Exception实例。

log.error("description", new Exception());

追问:我完全了解Thread.currentThread().getStackTrace()Thread.dumpStack()。这些输出到控制台,在许多环境中与 log4j 输出是分开的。我正在寻找一种将堆栈跟踪记录到 log4j 而不是控制台的方法。

4

1 回答 1

-1

史蒂夫,我知道你想要当前线程的堆栈跟踪。如果是这样,您可以通过使用currentThread()Thread 类的静态方法,然后获取堆栈跟踪来获取它。就像是:

StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();

如果要转储所有正在运行的线程的堆栈跟踪,可以使用getAllStackTraces()Thread 类的静态方法。

Map<Thread,StackTraceElement[]> stackTraces = Thread.getAllStackTraces();

更新

史蒂夫,我尝试了dumpStack()Thread 类的静态方法,它使用一个空的 exeption 来执行转储,所以,我认为你正在做的方式是正确的,或者“最好的方式”。

于 2012-10-10T18:25:12.890 回答