当没有异常时,在log4j的输出中包含堆栈跟踪的最佳方法是什么?我能想到的唯一方法是创建一个新Exception
实例。
log.error("description", new Exception());
追问:我完全了解Thread.currentThread().getStackTrace()
和Thread.dumpStack()
。这些输出到控制台,在许多环境中与 log4j 输出是分开的。我正在寻找一种将堆栈跟踪记录到 log4j 而不是控制台的方法。
当没有异常时,在log4j的输出中包含堆栈跟踪的最佳方法是什么?我能想到的唯一方法是创建一个新Exception
实例。
log.error("description", new Exception());
追问:我完全了解Thread.currentThread().getStackTrace()
和Thread.dumpStack()
。这些输出到控制台,在许多环境中与 log4j 输出是分开的。我正在寻找一种将堆栈跟踪记录到 log4j 而不是控制台的方法。
史蒂夫,我知道你想要当前线程的堆栈跟踪。如果是这样,您可以通过使用currentThread()
Thread 类的静态方法,然后获取堆栈跟踪来获取它。就像是:
StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
如果要转储所有正在运行的线程的堆栈跟踪,可以使用getAllStackTraces()
Thread 类的静态方法。
Map<Thread,StackTraceElement[]> stackTraces = Thread.getAllStackTraces();
更新
史蒂夫,我尝试了dumpStack()
Thread 类的静态方法,它使用一个空的 exeption 来执行转储,所以,我认为你正在做的方式是正确的,或者“最好的方式”。