Comment déterminer quel niveau de journal utiliser?

Les niveaux de journalisation WARN, ERROR et FATAL sont assez clairs. Mais quand est-ce que DEBUG est quelque chose et quand INFO?

J’ai vu des projets verbeux au niveau INFO, mais j’ai aussi vu du code qui favorise trop le niveau DEBUG. Dans les deux cas, des informations utiles sont cachées dans le bruit.

Quels sont les critères pour déterminer les niveaux de journal?

Je ne pense pas qu’il existe des règles ssortingctes; en utilisant les niveaux de type log4j, mes règles de base sont les suivantes:

  • FATAL : l’application (ou au moins un fil) est sur le sharepoint mourir horriblement. C’est là que vont les informations expliquant pourquoi cela se produit.
  • ERREUR : quelque chose que l’application fait ne devrait pas. Ce n’est pas une erreur d’utilisateur (“requête de recherche non valide”); c’est un échec d’assertion, un problème de réseau, etc., probablement celui qui va interrompre l’opération en cours
  • WARN : quelque chose de préoccupant mais qui ne provoque pas une interruption de l’opération; Nombre de connexions dans le pool de bases de données diminuant, un délai d’attente inhabituel mais attendu dans une opération, etc. Je considère souvent «WARN» comme quelque chose d’utile dans l’ensemble; par exemple, grep, group et les compter pour obtenir une image de ce qui affecte la santé du système
  • INFO : enregistrement normal qui fait partie du fonctionnement normal de l’application; des trucs de diagnostic pour que vous puissiez revenir en arrière et dire «à quelle fréquence cette opération à grande échelle a-t-elle eu lieu?» ou «comment les données de l’utilisateur sont-elles entrées dans cet état?
  • DEBUG : désactivé par défaut, capable d’être activé pour le débogage de problèmes spécifiques inattendus. C’est ici que vous pouvez consigner des informations détaillées sur les parameters de la méthode clé ou d’autres informations utiles pour trouver des problèmes probables dans des zones «problématiques» spécifiques du code.
  • TRACE : “Sérieusement, WTF se passe ici?!?! Je dois enregistrer chaque instruction que j’exécute pour trouver ce bogue de corruption de mémoire @ # $ @ ing avant que je ne devienne fou”

Pas figé, mais une idée approximative de ma façon de penser.

De manière informelle j’utilise cette sorte de hiérarchie,

  • DEBUG – valeurs de trace réelles
  • INFO – Quelque chose vient de se passer – rien d’important, juste un drapeau
  • WARN – tout fonctionne, mais quelque chose n’est pas tout à fait ce qui était attendu
  • ERREUR – il s’est passé quelque chose qui devra être corrigé, mais nous pouvons continuer et faire d’autres activités (indépendantes)
  • FATAL – un problème assez grave que nous ne devrions même pas continuer

Je vais généralement sortir avec INFO étant enregistré, mais seulement si je sais que les fichiers journaux sont réellement examinés (et la taille n’est pas un problème), sinon c’est WARN.

Pensez à qui doit utiliser chaque niveau. Dans mon code, je garde DEBUG réservé à une sortie de développeur, par exemple une sortie qui aiderait uniquement un développeur. VERBOSE est utilisé pour un utilisateur normal lorsque beaucoup d’informations sont nécessaires. INFO J’utilise normalement pour afficher les événements majeurs (par exemple, envoyer une page Web, vérifier quelque chose d’important).

Et FAIL et WARN sont assez explicites.

La convention dans mon équipe consiste à utiliser le debug si quelque chose est calculé dans le message, alors que l’ info est utilisée pour le texte brut. Donc, en effet, info vous montrera ce qui se passe et le debug affichera les valeurs des choses qui se passent.

J’ai tendance à cibler INFO vers l’utilisateur pour lui donner des messages qui ne sont même pas des avertissements. DEBUG a tendance à être utilisé par les développeurs où je produis des messages pour aider à suivre le stream dans le code (avec des valeurs de variables également).

J’aime aussi un autre niveau de DEBUG (DEBUG2?) Qui donne des charges absolues d’informations de débogage telles que des vidages hexadécimaux de tous les tampons et ainsi de suite.

Il n’y a pas besoin d’un niveau DEBUG2. C’est pour ça que “TRACE” est. TRACE est censé être le plus bas niveau de journalisation en sortie de toutes les informations possibles.

Pour éviter un déluge d’informations, il n’est généralement pas recommandé d’activer la journalisation au niveau de la trace dans tout un projet. Au lieu de cela, utilisez ‘DEBUG’ pour trouver des informations générales sur le bogue et son emplacement (d’où le nom), puis activez TRACE uniquement pour ce composant si vous ne pouvez toujours pas le comprendre.