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

我知道应该避免在Android应用程序中使用
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”;
  • 一条消息,请注意,这是一个字符串,因此在您的情况下,它需要如下所示:
  • 试一试{ //做点什么 }捕获(例外e){ Log.d(标记“一般异常:\n”+e); } 请注意字符串连接运算符的用法

    编辑:注意:Log确实有一个重载,它确实可以接受第三个参数,但通常使用带有两个参数的方法,对于第三个参数,即
    可丢弃的
    ,如中所述。尽管如此,我很少在我的项目中使用它,因为带有两个参数的方法对于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);
        }