2013-08-31 5 views
9

e.printStackTrace()は正常に動作します(つまり、私のstacktraceをstderrに出力します)。しかし、Log.Xはスタックトレースをまったく印刷できません。例えばAndroidのLog.Xはstacktraceを印刷しません

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

出力:

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) 

答えて

21

をして、log.xで使用されているAndroidのLog.getStackTraceStringはUnknownHostExceptionがツバメが判明します。 :(

から: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(); 
} 

それはすべての非常によく減らすログにも私の例外が悪いjoojooが何であったかを教えていないことではなく吐き出すだと説明している

+3

まあ、私はこれを検討したいです!。 Androidのバグ – dhakim

+3

少なくともgetMessageはスタックトレースに記録されていません... – Oliv

+2

これは単なる馬鹿馬鹿しくて馬鹿馬鹿しい開発者です - アプリがUnknownHostExceptionを記録するとどうなりますか?他の多くの例外はこの馬鹿げた方法で隠されていますか?Androidは開発が難しいsoooです。 –

関連する問題