在像这样的Android Exceptions中使用printStackTrace()是不是一个坏主意?
} catch (Exception e) {
e.printStackTrace();
}
答案 0 :(得分:46)
我相信这就是你所需要的:
catch (Exception e) {
Log.e(TAG,Log.getStackTraceString(e));
}
答案 1 :(得分:37)
是的,这是一个坏主意。您应该使用Android专为此目的而设计的内置日志类:http://developer.android.com/reference/android/util/Log.html
它为您提供了记录调试消息,警告,错误等的选项。
记录错误:
Log.e(TAG, "message", e)
其中的消息可以解释抛出异常时的尝试内容
或简单地Log.e(TAG, e)
然后,您可以在运行代码时单击底部的日志控制台,并使用TAG或日志消息类型轻松搜索它作为过滤器
答案 2 :(得分:19)
是。 printStackTrace()
很方便,但不鼓励,特别是在Android上,logcat
可以看到它,但是在未指定的级别记录,没有正确的消息。相反,记录异常的正确方法是......
Log.e(TAG, "Explanation of what was being attempted", e);
请注意,该异常用作第三个参数,不会附加到message参数。 Log
为您处理详细信息 - 打印您的消息(提供您在代码中尝试执行的操作的上下文)和Exception
的消息,以及其堆栈跟踪。
答案 3 :(得分:9)
问题是:在Andriod应用程序上下文中对堆栈跟踪的所有打印是否有用? 标准输出在运行时是否可见?有人会关心吗?
我的观点是,如果没有人要检查标准输出并注意调试错误,则对此方法的调用是死代码,并且编写堆栈跟踪消息是一项毫无价值的开销。如果只需要在开发时进行调试,则可以设置一个可访问的全局常量,并在运行时检查它:
} catch (Exception e) {
if(com.foo.MyEnvironmentConstants.isDebugging()) {
e.printStackTrace();
} //else do noting
}
答案 4 :(得分:9)
我会避免使用printStackTrace()
,使用日志系统及其支持异常。
log.log(Level.SEVERE, "Uncaught exception", e);
因此,如果您想要更改日志记录的处理方式,那就更容易了。