记录和显示错误详细信息的正确方法?

时间:2012-12-27 16:32:44

标签: android exception-handling

我知道应该避免在Android应用中使用printStackTrace(),我们应该使用Log类。

在此之后,我尝试记录这样的错误:

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的详细信息。

有人可以告诉我做错了吗?!

5 个答案:

答案 0 :(得分:1)

改为:

  Log.d(TAG, e.getClass().getSimpleName() + ": " + e.getMessage());

答案 1 :(得分:1)

没有第3个参数!

如果你阅读 sdk文档,android.utils.Log有两个参数,这是使用的一般准则:

  1. 标识邮件的标记(通常可以定义为public static final String TAG="myActivity";
  2. 一条消息,请注意这是一个字符串,所以在你的情况下它需要是这样的:
  3. try {
       //do something  
    } catch (Exception e) {
       Log.d(TAG, "General Exception:\n" + e);
    } 
    

    注意字符串连接运算符的用法。

    编辑: 要注意:Log确实有一个重载,它确实可以使用第三个参数,但通常使用带有两个参数的方法,就第三个参数而言参数,即SDK中记录的Throwable。我很少在我的项目中使用它,因为具有两个参数的方法足以满足我的需要。

答案 2 :(得分:0)

您将获得通用的Exception,一个顶级对象,避免Pokemon异常处理(必须捕获所有)并捕获特定的异常。但这并不是您没有看到异常细节的原因:尝试ioe.getMessage()

   try{
       startActivity( alertIntent );
   }catch(IOException ioe)
   {
       Log.e("error", "startActivity exception "+ ioe.getMessage());
   }

如果您需要知道日志记录方法的签名,请查看文档: http://developer.android.com/reference/android/util/Log.html

了解更多详情和想法: http://blog.nelsondev.net/?p=187

答案 3 :(得分:0)

Log.v(); // Verbose
Log.d(); // Debug
Log.i(); // Info
Log.w(); // Warning
Log.e(); // Error

了解更多我nfo

Log.e("error", String.valueOf(e.getMessage()));

答案 4 :(得分:0)

改为做这些::

try {
 //do something  
    } 
catch (Exception e) {
    Log.e(TAG, "General Exception::"+e);
    }