Android 记录和显示错误详细信息的正确方法?
我知道应该避免在Android应用程序中使用Android 记录和显示错误详细信息的正确方法?,android,exception-handling,Android,Exception Handling,我知道应该避免在Android应用程序中使用printStackTrace(),我们应该使用Logclass 接下来,我尝试记录如下错误: try { //do something } catch (Exception e) { Log.d(TAG, "General Exception:\n", e); } Log level: Verbose 12-27 17:20:21.468: DEBUG/MyApp Page two fragment(11193): General
printStackTrace()
,我们应该使用Log
class
接下来,我尝试记录如下错误:
try {
//do something
} catch (Exception e) {
Log.d(TAG, "General Exception:\n", e);
}
Log level: Verbose
12-27 17:20:21.468: DEBUG/MyApp Page two fragment(11193): General IOException:
我得到如下输出:
try {
//do something
} catch (Exception e) {
Log.d(TAG, "General Exception:\n", e);
}
Log level: Verbose
12-27 17:20:21.468: DEBUG/MyApp Page two fragment(11193): General IOException:
我没有得到有关IOException
的详细信息
谁能告诉我我做错了什么 改为这样做:
Log.d(TAG, e.getClass().getSimpleName() + ": " + e.getMessage());
你会得到一个通用的异常,一个顶级对象,避免Pokemon异常处理(必须捕获所有异常)并捕获特定的异常。但这并不是您没有看到异常详细信息的原因:请尝试
ioe.getMessage()
:
如果需要了解日志记录方法的签名,只需查看文档:
欲了解更多详情和想法:
更多的我
没有第三个参数
如果您阅读sdk文档,需要两个参数,这是使用的一般准则:
公共静态最终字符串tag=“myActivity”;
可丢弃的
,如中所述。尽管如此,我很少在我的项目中使用它,因为带有两个参数的方法对于r我的需要。请改为:
try {
//do something
}
catch (Exception e) {
Log.e(TAG, "General Exception::"+e);
}
在
catch(…){}
块中使用e.toString()
。@t0mm13b那么这个方法中第三个参数的用途是什么?这只是一个示例,这就是为什么我设置了一般异常:)。在我自己的例子中,我有更多的异常,如io、超时、空指针等,但我想让它读起来不那么复杂我会放置一个断点并调试它,检查异常对象并检查它提供了什么关于根本原因的信息。对不起,我没有意识到你说的是2参数方法。那么,此方法中第三个参数的用途是什么?如果您只想打印异常消息,可以使用此d(String tag,String msg)
,如果您想提供用于日志记录的可丢弃对象,则可以使用此d(String tag,String msg,Throwable tr)
。@theMarceloR的解释是准确的。您将更经常地使用2参数方法。他为什么要在Log.d
上这样做呢?@afuzzyllama这并不重要。作为一名开发人员,您可以决定这一点。我通常总是使用Log.d,因为我们可以在更复杂的项目中分离日志。@afuzzyllama基于您在其类别中插入的日志的筛选,或者通过getClassName()基于方法或类名使用标记筛选;
try {
//do something
} catch (Exception e) {
Log.d(TAG, "General Exception:\n" + e);
}
try {
//do something
}
catch (Exception e) {
Log.e(TAG, "General Exception::"+e);
}