2012-03-27 6 views
3

J'utilise sl4j/logback comme cadre de journalisation. Je ne suis pas sûr de la bonne façon de consigner les erreurs. A savoir, en supposant e est une exception, je veux vous connecter, je hésite toujours entre:Enregistrement des bonnes pratiques

  1. logger.error("Something bad happened: {}\nError: {}", someInfo, e.getMessage());

    Je comprends que ce n'est pas une bonne pratique parce que la trace de la pile est perdu - pas grand pour comprendre ce qui est arrivé.

  2. logger.error("Something bad happened: {}\nError: {}", someInfo, e.getMessage(), e);

    utilisant à la fois e.getMessage() et e semble redondant, bien que je ne sais pas s'il est possible que e.getMessage() peut contenir des informations supplémentaires qui ne seraient pas voir si je:

  3. logger.error("Something bad happened: {}", someInfo, e);

    qui est la syntaxe que j'utilise généralement - mais je veux m'assurer que rien ne me manque.

Répondre

2

J'utilise habituellement numéro deux, bien que je casse jamais une ligne de journal en 2 lignes (\ n), bien que lors de l'impression de la trace de la pile, il ne sera pas beaucoup d'importance (dans tous les autres cas, il crée trop d'entropie visuelle quand vos logs deviennent vraiment énormes).

Pourquoi utiliser le numéro 2?

Je veux voir le message tout de suite, sur la première ligne, puisque c'est la première chose qui me dit ce qui s'est passé. Certains peuvent être attendus et je peux les ignorer en toute sécurité, et certains ne le seront peut-être pas.

Dans le cas où j'ai besoin d'examiner exactement ce qui s'est passé, je regarde mieux la trace de la pile.

Je pense que le numéro 3 est aussi bien, puisque vous aurez quand même l'information dont vous avez besoin. NE JAMAIS utiliser l'option 1.

Par ailleurs, et à une certaine opinion, en disant que quelque chose est arrivé sur une ligne d'erreur est un peu redondant;)

1

Si vous regardez le code source de Throwable (http : //www.docjar.com/html/api/java/lang/Throwable.java.html) vous trouverez qu'un Throwable lorsqu'on lui demande d'imprimer son stacktrace commence en se louant lui-même, ce qui imprime son message.

je trouve qu'il est peu probable que tout le monde changerait ce comportement, afin que vos arguments sont tous corrects et 3. L'option est bien

1

Vous voulez certainement la trace de la pile. Le message est utile dans les cas où vous avez fait quelque chose comme "Erreur: Impossible de trouver le client avec l'ID: {0}", qui peut ne pas être dans la pile. Exemple trivial mais vous obtenez ce que je veux dire.

Un autre pour le message est si vous faites le journal comme dire un CSV ainsi vous pouvez l'analyser. Vous pouvez standardiser le message et faciliter le filtrage. Last but not least informations redondantes dans un journal des erreurs, est beaucoup moins question d'un problème, puis l'information dont vous n'avez pas besoin d'être dans le journal des erreurs. Err du côté de l'extrême verbosité est mon principe directeur.Oh, ceci est pour l'accès contrôlé à un fichier journal, ne jamais dire mettre trace de la pile comme une réponse dans ASP par exemple. Les pirates humides rêvent de ça.