264 votes

Enregistrement des niveaux - Logback - règle du pouce pour attribuer des niveaux de journal

Je suis en utilisant logback dans mon projet en cours.

Il propose six niveaux de journalisation: TRACE des informations de DÉBOGAGE AVERTIR de l'ERREUR OFF

Je suis à la recherche d'une règle générale pour déterminer le niveau de journal pour des activités communes. Par exemple, si un sujet est verrouillé, le message de log être réglé sur le niveau de débogage ou le niveau de l'info. Ou si un socket est utilisé, doit son identifiant être connecté au niveau de débogage ou le niveau de trace.

Je vais apprécier les réponses des exemples pour chaque niveau d'enregistrement.

482voto

ecodan Points 1839

J'ai surtout construire à grande échelle, de la haute disponibilité des systèmes de type, donc, ma réponse est biaisée vers la regardant d'un soutien à la production du point de vue; cela dit, nous attribuons à peu près comme suit:

  • erreur: le système est en détresse, les clients sont probablement touchés (ou seront bientôt) et le correctif nécessite probablement une intervention humaine. Le "2H du matin, la règle" s'applique ici - si vous êtes sur un appel, voulez-vous être réveillé à 2H du matin si cette condition se produit? Si oui, alors vous connecter en tant que "erreur".

  • avertir: un imprévu technique ou un événement d'affaires qui s'est passé, les clients peuvent être touchés, mais probablement pas dans l'immédiat l'intervention humaine est nécessaire. Sur les personnes d'appel ne sera pas appelé immédiatement, mais le personnel de soutien voudront examiner ces questions le plus tôt possible afin de comprendre quel est l'impact. Fondamentalement, toute question qui doit être suivi, mais ne peut pas exiger une intervention immédiate.

  • info: les choses que nous voulons voir à volume élevé dans le cas où nous avons besoin de point de vue médicolégal, analyser un problème. Système d'événements de cycle de vie (système de démarrage, d'arrêt) aller ici. "Session" événements de cycle de vie (connexion, déconnexion, etc.) rendez-vous ici. Les limites des événements devraient être pris en considération (par exemple, appels de base de données, à distance des appels d'API). D'affaires typique des exceptions peuvent aller ici (par exemple connexion a échoué en raison de mauvaises informations d'identification). Tout autre événement que vous pensez que vous aurez besoin de voir de la production à volume élevé ici.

  • debug: juste au sujet de tout ce qui n'est pas de faire de "l'info" couper... tout message qui est utile dans le suivi des flux à travers le système et d'isoler les enjeux, en particulier lors de l'élaboration et contrôle de la qualité des phases. Nous utilisons des "debug" journaux de niveau d'entrée/de sortie de la plupart des non-trivial de méthodes et de marquage des événements intéressants et des points de décision à l'intérieur des méthodes.

  • trace: nous n'utilisons pas souvent, mais ce serait extrêmement détaillée et potentiellement à haut volume journaux que vous ne souhaitez généralement activé même au cours du développement normal. Les exemples incluent le dumping d'une hiérarchie complète des objets, de l'enregistrement de l'état lors de chaque itération de la grande boucle, etc.

Aussi ou plus important que de choisir le droit de niveaux de journal, est de s'assurer que les journaux sont significatifs et ont le besoin de contexte. Par exemple, vous aurez presque toujours souhaitez inclure l'ID de thread dans les journaux de sorte que vous pouvez suivre un seul thread, si nécessaire. Vous pouvez également employer un mécanisme pour associer des informations commerciales (par exemple, ID d'utilisateur) pour le fil de sorte qu'il devient connecté. Dans votre message, vous aurez envie d'inclure suffisamment d'informations pour s'assurer que le message peut être exploitables. Un journal comme "fichier introuvable exception caught" n'est pas très utile. Un meilleur message "fichier introuvable exception interceptée en essayant d'ouvrir le fichier config: /usr/local/app/somefile.txt. userId=12344."

Il y a également un certain nombre de bons de journalisation des guides de la... par exemple, voici un montage extrait de JCL:

  • erreur d'Autres erreurs d'exécution ou à des situations imprévues. Attendre à ce qu'ils soient immédiatement visibles sur une console d'état.
  • garde - Utilisation de l'Api obsolète, d'une mauvaise utilisation de l'API, qui est "presque" des erreurs, d'autres d'exécution des situations indésirables ou inattendus, mais pas forcément "mauvais". Attendre à ce qu'ils soient immédiatement visibles sur un le statut de la console.
  • info Intéressante des événements de l'exécution (démarrage/arrêt). Attendre à ce qu'ils soient immédiatement visibles sur une console, donc être prudent et de garder à la un minimum.
  • debug - des informations détaillées sur le débit à travers le système. Attendre à ce qu'ils soient écrites dans les journaux.
  • la trace des informations plus détaillées. Attendre à ce qu'ils soient écrites dans les journaux.

53voto

Tom Anderson Points 22456

Mon approche, je pense venir plus à partir d'un développement que d'un point de vue, est:

  • Erreur signifie que l'exécution d'une tâche n'a pas pu être terminé; un email ne pouvait pas être envoyé, une page ne pouvait pas être rendue, certaines données ne pouvaient pas être stockées dans une base de données, quelque chose comme ça. Quelque chose a définitivement tourné mal.
  • Avertissement signifie que quelque chose d'inattendu s'est produit, mais que l'exécution puisse se poursuivre, peut-être dans un mode dégradé; un fichier de configuration a été absente, mais les valeurs par défaut ont été utilisés, un prix a été calculé comme négatifs, de sorte qu'il a été fixé à zéro, etc. Quelque chose n'est pas droite, mais il n'est pas allé correctement de mal encore mises en garde sont souvent un signe qu'il y aura une erreur très bientôt.
  • Info signifie que quelque chose de normal, mais l'important est arrivé; le démarrage du système, le système s'est arrêté, l'inventaire quotidien tâche de mise à jour ran, etc. Il ne devrait pas être continue torrent de ces, autrement il n'y a tout simplement trop de choses à lire.
  • Debug signifie que quelque chose de normal et insignifiant est arrivé; un nouvel utilisateur sur le site, une page a été rendue, un arrêté a été pris, un prix a été mis à jour. C'est l'étoffe exclus de l'info car il y aurait trop de lui.
  • Trace est quelque chose que je n'ai jamais réellement utilisé

8voto

Phil Parker Points 139

Je réponds à cette venue d'une composante de base de l'architecture, où une organisation peut être en cours d'exécution de nombreux composants qui peuvent compter les uns sur les autres. Au cours d'une propagation de l'échec, les niveaux d'enregistrement devrait aider à identifier à la fois les éléments qui sont touchés et qui sont une cause racine.

  • ERREUR - Cette composante a eu un échec et la cause est censé être à l'intérieur (internes, exception non gérée, l'échec de la encapsulé dépendance... par exemple, base de données, le RESTE serait par exemple il a reçu une 4xx erreur de dépendance). Me (responsable de cette composante) à sortir du lit.

  • AVERTIR - Ce composant a eu un échec semble être causé par un composant dépendant (REPOS, par exemple, 5xx état de dépendance). Obtenir les responsables de la composante hors du lit.

  • INFO - autre Chose que nous voulons faire à un opérateur. Si vous décidez de connecter heureux chemins alors je recommande de limiter à 1 message du journal par importante opération (par exemple à la demande http entrante).

Pour tous les messages de log veillez à vous connecter contexte utile (et de donner la priorité sur la création de messages lisibles par l'homme et/ou utiles plutôt que d'avoir des tonnes de "codes d'erreur")

  • DEBUG (et ci-dessous) - ne doit pas être utilisé à tous (et certainement pas dans la production). Dans le développement, je vous conseille l'utilisation d'une combinaison de TDD et de Débogage (le cas échéant) plutôt que de polluer le code avec le journal de déclarations. Dans la production, au-dessus de journalisation INFO, combinée avec d'autres mesures devraient être suffisantes.

Une belle façon de visualiser les au-dessus des niveaux de journalisation est d'imaginer un ensemble d'écrans de suivi pour chaque composant. Quand tout fonctionne bien, ils sont au vert, si un composant enregistre un message d'AVERTISSEMENT puis il ira à l'orange (orange) si quoi que ce soit enregistre une ERREUR, alors elle sera en rouge.

Dans le cas d'un incident, vous devriez avoir un (root cause) de la composante rouge et tous les composants concernés devraient aller à l'orange/orange.

3voto

blagus Points 112

Pour les autres réponses, mon cadre ont presque les mêmes niveaux:

  1. Erreur: les erreurs logiques sur demande, comme une base de données de délai d'attente de connexion. Les choses que l'appel à la correction d'un bug dans un avenir proche
  2. Attention: pas de problèmes de rupture, mais les trucs à payer attention. Comme une page demandée ne trouve pas
  3. Info: dans des fonctions/méthodes de première ligne, pour montrer une procédure qui a été appelé ou une étape bien passé, comme une requête d'insertion fait
  4. journal: la logique de l'information, comme un résultat d'une instruction if
  5. debug: contenu de variable pertinente pour être regardé de façon permanente

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X