2011-07-25 23 views
55

मैं stderr के अलावा किसी स्ट्रीम के अपवाद के स्टैक ट्रेस को कैसे प्रिंट करूं? एक तरीका मैंने पाया है getStackTrace() का उपयोग करना और पूरी सूची को स्ट्रीम में प्रिंट करना है।अपवाद के स्टैक ट्रेस को प्रिंट करें

+0

आप स्ट्रिंग के रूप में अपवाद का पता लगाने प्राप्त करना चाहते हैं आप 'कॉल कर सकते हैं Trowable (अपवाद) है कि' StackTraceElement' ऑब्जेक्ट की श्रेणी है कि आप एक स्ट्रिंग के लिए गठजोड़ कर सकते हैं वापस आ जाएगी की getStackTrace' विधि (के toString विधि का उपयोग उस वस्तु को ट्रेस की एक पंक्ति प्राप्त करने के लिए)। – jcubic

उत्तर

46

Throwable.printStackTrace(..) एक PrintWriter या PrintStream तर्क ले जा सकते हैं:

} catch (Exception ex) { 
    ex.printStackTrace(new PrintStream(yourOutputStream)); 
} 

जिसके अनुसार, LOGBack या log4j की तरह एक प्रवेश कार्यान्वयन के साथ SLF4J की तरह एक लकड़हारा इंटरफ़ेस का उपयोग पर विचार करें।

2

Throwable वर्ग printStackTrace नामित दो तरीकों, एक है कि एक PrintWriter और एक, कि एक PrintStream में ले जाता है कि यह देखते हुए धारा में स्टैक ट्रेस आउटपुट को स्वीकार करता है प्रदान करता है। इनमें से एक का उपयोग करने पर विचार करें।

56

Throwable.printStackTrace() का एक वैकल्पिक रूप है जो एक प्रिंट स्ट्रीम को तर्क के रूप में लेता है। http://download.oracle.com/javase/6/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintStream)

उदा।

catch(Exception e) { 
    e.printStackTrace(System.out); 
} 

यह स्टैक त्रुटि के बजाय स्टैक ट्रेस को std out प्रिंट करेगा।

+3

@ फ्रैंकलिनयु, सवाल का पूरा बिंदु यह है कि वह stderr पर प्रिंट नहीं करना चाहता, बल्कि एक अन्य मनमानी धारा के लिए। –

61

सुंदर नहीं, लेकिन फिर भी एक समाधान:

StringWriter writer = new StringWriter(); 
PrintWriter printWriter = new PrintWriter(writer); 
exception.printStackTrace(printWriter); 
printWriter.flush(); 

String stackTrace = writer.toString(); 
+3

यह वही है जो मुझे चाहिए (भले ही मैं इसे वास्तव में गंदा महसूस कर रहा हूं!) –

1

javadoc

out = some stream ... 
try 
{ 
} 
catch (Exception cause) 
{ 
     cause . printStrackTrace (new PrintStream (out)) ; 
} 
8

देखें एंड्रॉयड देव minimalists के लिए: Log.getStackTraceString(exception)

+1

आप इसका उपयोग मनमाने ढंग से स्ट्रीम पर प्रिंट करने के लिए नहीं कर सकते। यह केवल तब उपयोगी होता है जब आपके पास लॉगर कॉन्फ़िगर किया गया हो। –

+0

यह एंड्रॉइड विकास के लिए बहुत अच्छा काम करता है। धन्यवाद! – wyzkid207

+0

मुझे यह न्यूनतम दृष्टिकोण पसंद आया लेकिन यह मेरे slf4j के साथ जेल नहीं था :( – killjoy

2

मैं एक विधि है कि स्टैकट्रेस

हो रही के साथ मदद करता है
private static String getStackTrace(Exception ex) { 
    StringBuffer sb = new StringBuffer(500); 
    StackTraceElement[] st = ex.getStackTrace(); 
    sb.append(ex.getClass().getName() + ": " + ex.getMessage() + "\n"); 
    for (int i = 0; i < st.length; i++) { 
     sb.append("\t at " + st[i].toString() + "\n"); 
    } 
    return sb.toString(); 

}

संबंधित मुद्दे