Android – 打印完整的exception回溯logging

我有一个try / catch块引发exception,我希望看到关于Android设备日志中的exception的信息。

我从我的开发计算机中用这个命令读取移动设备的日志:

/home/dan/android-sdk-linux_x86/tools/adb shell logcat 

我先试了一下:

 try { // code buggy code } catch (Exception e) { e.printStackTrace(); } 

但是不会将任何内容打印到日志中。 这太遗憾了,因为这会有很大的帮助。

我所取得的最好成绩是:

 try { // code buggy code } catch (Exception e) { Log.e("MYAPP", "exception: " + e.getMessage()); Log.e("MYAPP", "exception: " + e.toString()); } 

总比没有好,但不是很令人满意。

你知道如何打印完整的回溯到日志?

谢谢。

 try { // code that might throw an exception } catch (Exception e) { Log.e("MYAPP", "exception", e); } 

这个辅助函数也很好,因为Exception也是一个Throwable

  try{ //bugtastic code here } catch (Exception e) { Log.e(TAG, "Exception: "+Log.getStackTraceString(e)); } 
 catch (Exception e) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); PrintStream stream = new PrintStream( baos ); e.printStackTrace(stream); stream.flush(); Log.e("MYAPP", new String( baos.toByteArray() ); } 

或者…你知道…… EboMike说的。

e.printStackTrace()将其打印给我。 我不认为你正在运行logcat。 不要在shell中运行它,只要运行

/home/dan/android-sdk-linux_x86/tools/adb logcat

 public String getStackTrace(Exception e){ StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); e.printStackTrace(pw); return sw.toString(); } 

标准输出和错误输出默认定向到/ dev / null,因此全部丢失。 如果你想logging这个输出,那么你需要按照这里显示的“查看stdout和stderr”的指示

在Android的上下文中,我不得不将exception转换为string:

 try { url = new URL(REGISTRATION_PATH); urlConnection = (HttpURLConnection) url.openConnection(); } catch(MalformedURLException e) { Log.i("MALFORMED URL", String.valueOf(e)); } catch(IOException e) { Log.i("IOException", String.valueOf(e)); } 
 try{ ... } catch (Exception e) { Log.e(e.getClass().getName(), e.getMessage(), e.getCause()); }