2011-10-07 2 views
0

Je suis à la recherche d'un document sur les meilleures pratiques (ou vos opinions) sur la façon d'enregistrer efficacement les exceptions et leurs traces de pile. Bien sûr, en supposant que l'un des frameworks de journalisation populaires tels que Log4J, SLF4J, java.util.logging, etcQuel niveau utiliser pour la consignation des traces de la pile d'exceptions dans Java?

Je suis particulièrement intéressé par votre opinion sur les niveaux de traces de pile doivent être enregistrées.

J'ai entendu quelques-uns contredisant les uns les autres opinions telles que:

  • traces de pile devraient être enregistrés que sur le niveau DEBUG alors que le niveau d'erreur ne doit contenir que message d'erreur « lisible »
  • traces de pile doivent être connectés Niveau ERREUR pour donner à l'opérateur le maximum d'informations nécessaires pour trouver la cause première d'une exception

J'ai trouvé quelques articles intéressants mais aucun d'entre eux ne touche à ce sujet particulier:

ce qui signifie sans doute que les auteurs de ces articles avaient mêmes préoccupations que moi :-)

Je serais vraiment intéressé à votre avis à ce sujet .

Répondre

7

La trace de pile est l'information la plus précieuse que vous obtenez lors du dépannage. Je ne risquerais jamais de l'enregistrer au niveau DEBUG car il pourrait être désactivé. Et je ne veux presque jamais supprimer les traces de pile.

Notez également que:

log.error("Houston, we have a problem", ex); 

imprimera le message lisible par l'homme en ligne marqué comme erreur, alors que la trace de la pile suit cette ligne. Si vous voulez que vos erreurs soient seulement lisibles par l'homme, faites juste grep ERROR.

1

Je ne suis pas sûr du conseil sur les meilleures pratiques pour cela, mais à la fin, pour moi, cela se résume à ceci: Les exceptions ne devraient être visibles que dans des circonstances exceptionnelles. Le concept d'exception a été inventé pour donner aux développeurs une chance de gérer les erreurs en interne.

En réalité, la plupart du code que je vois n'essaie même pas de les manipuler, au lieu de les déverser dans le journal, sysout (ou le pire des cas) dans les boîtes de dialogue. Je sais, pour un développeur, il est important dans certains cas d'obtenir le stacetrace complet. Mais pas presque dans tous. Créer votre propre cadre d'exception (ce qui est certainement une bonne pratique) pourrait déjà suffire à comprendre le contexte d'une exception simplement par classname.

Je vous conseille de faire ce qui suit:

  1. Créer votre propre cadre d'exception
  2. Inclure les codes d'erreur dans le message, pour votre référence
  3. enregistrer le message d'exception en cas d'erreur
  4. Connectez le stacktrace sur DEBUG
  5. N'affichez JAMAIS cet utilisateur. Au lieu de montrer un message utile. Peut-être inclure un moyen de signaler l'erreur (avec stacktrace) avec un minimum de fuzz.

Remarque: Si vous écrivez un logiciel interne «entreprise», oubliez tout ce que j'ai écrit. :-)

0

Je pense que la trace de pile doit être enregistrée à l'endroit approprié en fonction des meilleures pratiques prioritaires. Selon la nature de l'exception et sa place dans votre application, cela peut être l'un des nombreux niveaux. S'il vous plaît voir cette question connexe: Commons Logging priority best practices

Questions connexes