Bir istisnanın yığın izini stderr dışındaki bir akışa nasıl yazdırabilirim? Bulduğum yollardan biri getStackTrace() kullanmak ve tüm listeyi akışa yazdırmaktır.Özel durumun yığın izini yazdırma
cevap
Throwable sınıfı printStackTrace
adlandırılan iki yöntem, söz konusu akışına yığın izleme çıktılar bir PrintStream
alır bir PrintWriter
ve bir kabul eden bir sağlar. Bunlardan birini kullanmayı düşünün.
Baskı akışı bir argüman olarak alan alternatif bir Throwable.printStackTrace() biçimi vardır. ILLUSTRATORNG.
catch(Exception e) {
e.printStackTrace(System.out);
}
Bu, yığın izini std hatası yerine std olarak yazdırır.
@FranklinYu, sorunun tam noktası, stderr'e değil, başka bir rastgele akışa yazdırmak istememesi. –
güzel değil, ama yine de bir çözüm:
StringWriter writer = new StringWriter();
PrintWriter printWriter = new PrintWriter(writer);
exception.printStackTrace(printWriter);
printWriter.flush();
String stackTrace = writer.toString();
İhtiyacım olan budur (bunu kullanarak gerçekten kirli hissediyorum bile!) –
android dev minimalistlere için javadoc
out = some stream ...
try
{
}
catch (Exception cause)
{
cause . printStrackTrace (new PrintStream (out)) ;
}
bakınız: Log.getStackTraceString(exception)
Ben stackTrace
alma konusunda yardımcı olan bir yöntem varprivate 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();
Eğer dize olarak istisna izini almak istiyorsanız
}
Eğer bir String birleştirebilirsiniz StackTraceElement' nesnelerin 'dizisi döndürür Trowable (İstisna) ait getStackTrace' yöntemi' çağırabilirsiniz (toString yöntemini kullanarak Bu nesne bir iz bir satır elde etmek için). – jcubic