2013-08-31 54 views
9

e.printStackTrace() hoạt động tốt (ví dụ: in ngăn xếp của tôi thành stderr) nhưng Log.X không in được một ngăn xếp nào cả.Android Log.X không in stacktrace

Ví dụ:

} catch (IOException e) { 
    Log.e("Network", "Exception", e); 
    e.printStackTrace(); 
} 

Output:

08-31 03:46:21.992: W/Network(13238): Exception 
08-31 03:46:22.092: W/System.err(13238): java.net.UnknownHostException: Unable to resolve host "...": No address associated with hostname 
08-31 03:46:22.204: W/System.err(13238): at java.net.InetAddress.lookupHostByName(InetAddress.java:394) 
08-31 03:46:22.222: W/System.err(13238): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 
08-31 03:46:22.222: W/System.err(13238): at java.net.InetAddress.getAllByName(InetAddress.java:214) 

Trả lời

21

Hóa ra Log.getStackTraceString Android được sử dụng bởi Log.X nuốt UnknownHostException. :(

Từ: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.2.2_r1/android/util/Log.java#Log.getStackTraceString%28java.lang.Throwable%29

public static String getStackTraceString(Throwable tr) { 
    if (tr == null) { 
     return ""; 
    } 

    // This is to reduce the amount of log spew that apps do in the non-error 
    // condition of the network being unavailable. 
    Throwable t = tr; 
    while (t != null) { 
     if (t instanceof UnknownHostException) { 
      return ""; 
     } 
     t = t.getCause(); 
    } 

    StringWriter sw = new StringWriter(); 
    PrintWriter pw = new PrintWriter(sw); 
    tr.printStackTrace(pw); 
    return sw.toString(); 
} 

Đó là tất cả log rất tốt làm giảm phát tán đi nhiều nhưng để thậm chí không cho tôi biết những gì ngoại lệ của tôi đã là JooJoo xấu

+3

Vâng đó giải thích rằng tôi muốn xem xét việc này!. một lỗi trong Android – dhakim

+3

Ít nhất getMessage nên được ghi lại, nếu không phải là stacktrace ... – Oliv

+2

Đây chỉ là đồng bằng ngu ngốc, đạo đức và chống phát triển - vì vậy nếu ứng dụng ghi nhật ký UnknownHostException thì sao? Có thể có một lý do cho điều đó! nhiều trường hợp ngoại lệ khác được ẩn theo cách đạo đức này? Android rất khó phát triển. –