在log4j中包含堆栈跟踪

时间:2012-10-10 18:10:38

标签: java log4j

  

可能重复:
  How do I in java add a stacktrace to my debugging printout

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

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

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

1 个答案:

答案 0 :(得分:-1)

史蒂夫,我明白你想要当前线程的堆栈跟踪。如果是这样,您可以使用Thread类的currentThread()静态方法获取它,然后获取堆栈跟踪。类似的东西:

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

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

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

<强>更新

Steve,我尝试了Thread类的dumpStack()静态方法,它使用一个空的exeption来执行转储,因此,我认为你的方式是正确的,或者是“最好的方式”。 / p>