2012-10-10 101 views
2

可能重複:
How do I in java add a stacktrace to my debugging printout包括堆棧跟蹤log4j的

什麼是包括在log4j的的輸出堆棧跟蹤信息時,有沒有異常的最好方法?我能想到的唯一方法是創建一個新的Exception實例。

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

後續:本人完全清楚的Thread.currentThread().getStackTrace()Thread.dumpStack()。這些輸出到控制檯,在許多環境中,它們都與log4j輸出分開。我正在尋找一種方法將堆棧跟蹤記錄到log4j,而不是控制檯。

+0

你想要當前線程的堆棧跟蹤嗎? – davidbuzatto

+0

您自己提供的兩種解決方案中缺少什麼? 「對我沒有任何好處」不是一個非常有建設性的評論。 –

+0

這不是http://stackoverflow.com/questions/54882的重複。這個問題詢問如何在** log4j **中包含堆棧跟蹤。 「重複」問題只是將堆棧跟蹤輸出到標準輸出。標準輸出!= log4j輸出。 –

回答

0

Steve,我明白你想要當前線程的堆棧跟蹤。如果是這樣,可以使用Thread類的靜態方法currentThread(),然後獲取堆棧跟蹤。喜歡的東西:

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

如果你想轉儲所有正在運行的線程的堆棧跟蹤,你可以使用Thread類的getAllStackTraces()靜態方法。

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

更新

史蒂夫,我嘗試Thread類的dumpStack()靜態方法,它使用一個空的豁免,然後才能進行轉儲,所以,我認爲你正在做的方式是正確的,或「最好的辦法」。

+0

是的,我知道'getStackTrace()',但這對我沒有任何好處。我想喂這個給log4j。 –

+0

我認爲你的做法是一致的。我會更新我的答案。稍等片刻。 – davidbuzatto

+0

呃,難道你不能只餵食例如'StackTraceElement.toString()'到log4j?我不明白這個問題...... –