E 'una cattiva idea di utilizzare printStackTrace () per le eccezioni caugt?
-
27-09-2019 - |
Domanda
E 'una cattiva idea di utilizzare printStackTrace () in Eccezioni Android come questo?
} catch (Exception e) {
e.printStackTrace();
}
Soluzione
Sì, è una cattiva idea. Si dovrebbe invece usare Android classe incorporata registro appositamente per questi scopi: http: / /developer.android.com/reference/android/util/Log.html
Ti dà opzioni per registrare i messaggi di debug, avvertimenti, errori ecc.
Registrazione errori con:
Log.e(TAG, "message", e)
in cui il messaggio può essere una spiegazione di ciò che veniva tentato quando l'eccezione è stato gettato
o semplicemente Log.e(TAG, e)
se non si desidera fornire alcun messaggio per il contesto
Si può quindi fare clic sulla console di registro in basso durante l'esecuzione il codice e cercare facilmente utilizzando il tipo di messaggio TAG o il registro come un filtro
Altri suggerimenti
Credo che questo sia quello che vi serve:
catch (Exception e) {
Log.e(TAG,Log.getStackTraceString(e));
}
Sì. printStackTrace()
è conveniente ma scoraggiato, in particolare su Android in cui è visibile attraverso logcat
ma viene registrato ad un livello non specificato e senza un apposito messaggio. Al contrario, il modo corretto di registrare un eccezione è ...
Log.e(TAG, "Explanation of what was being attempted", e);
Si noti che l'eccezione viene utilizzato come terzo parametro, non aggiunto al parametro messaggio. maniglie Log
i dettagli per voi. - stampa il messaggio (che dà il contesto di ciò che si stava cercando di fare nel codice) e il messaggio del Exception
, così come il suo stack trace
La domanda è: è utile a tutti di stampa per l'analisi dello stack in un contesto di applicazione Andriod? Sarà lo standard output sia visibile in fase di esecuzione? Will cura qualcuno su di esso?
Il mio punto è che, se nessuno sta andando a controllare l'output standard e la cura per eseguire il debug l'errore, la chiamata a questo metodo è codice morto, e comporre il messaggio stacktrace è una spesa inutile. Se ne avete bisogno solo per il debug allo sviluppo, è possibile impostare un costante globale accessibile, e controllare in fase di esecuzione:
} catch (Exception e) {
if(com.foo.MyEnvironmentConstants.isDebugging()) {
e.printStackTrace();
} //else do noting
}
Vorrei evitare di usare printStackTrace()
, utilizzare un sistema di registrazione e il suo sostegno di eccezioni.
log.log(Level.SEVERE, "Uncaught exception", e);
Quindi, se si desidera modificare la modalità di registrazione viene gestito è molto più facile.