web-dev-qa-db-fra.com

Est-ce une mauvaise idée d'utiliser printStackTrace () pour les exceptions caugt?

Est-ce une mauvaise idée d'utiliser printStackTrace () dans Android Exceptions comme celle-ci?

} catch (Exception e) {
    e.printStackTrace();
}
55
jacknad

Oui, c'est une mauvaise idée. Vous devez plutôt utiliser la classe de journaux intégrée d'Android spécialement conçue à ces fins: http://developer.Android.com/reference/Android/util/Log.html

Il vous donne des options pour enregistrer les messages de débogage, les avertissements, les erreurs, etc.

Erreurs de journalisation avec:

Log.e(TAG, "message", e) où le message peut être une explication de ce qui était tenté lorsque l'exception a été levée

ou simplement Log.e(TAG, e) si vous ne souhaitez pas fournir de message pour le contexte

Vous pouvez ensuite cliquer sur la console de journal en bas pendant l'exécution de votre code et le rechercher facilement en utilisant le type de message TAG ou log comme filtre

37
Julian

Je crois que c'est ce dont vous avez besoin:

catch (Exception e) {
     Log.e(TAG,Log.getStackTraceString(e)); 
}
46
Adil Atilgan

Oui. printStackTrace() est pratique mais déconseillé, en particulier sur Android où il est visible à travers logcat mais est enregistré à un niveau non spécifié et sans message approprié. Au lieu de cela, la bonne façon de consigner une exception est ...

Log.e(TAG, "Explanation of what was being attempted", e);

Notez que l'exception est utilisée comme troisième paramètre, non ajoutée au paramètre de message. Log gère les détails pour vous - l'impression de votre message (qui donne le contexte de ce que vous essayez de faire dans votre code) et le message de Exception, ainsi que sa trace de pile.

19
spaaarky21

Je voudrais éviter d'utiliser printStackTrace(), utiliser un système de journalisation et son support des exceptions.

log.log(Level.SEVERE, "Uncaught exception", e);

Donc, si vous voulez changer la façon dont la journalisation est gérée, c'est beaucoup plus facile.

9
Ryan

La question est: est-il utile d'imprimer sur la trace de la pile dans un contexte d'application Andriod? La sortie standard sera-t-elle visible lors de l'exécution? Quelqu'un s'en souciera-t-il?

Mon point est que, si personne ne vérifie la sortie standard et ne souhaite déboguer l'erreur, l'appel à cette méthode est du code mort et la composition du message stacktrace est une dépense sans valeur. Si vous en avez besoin uniquement pour le débogage au cours du développement, vous pouvez définir une constante globale accessible et la vérifier lors de l'exécution:

} catch (Exception e) {
   if(com.foo.MyEnvironmentConstants.isDebugging()) {
      e.printStackTrace();
   } //else do noting
}
9
Tomas Narros