web-dev-qa-db-fra.com

Comment utiliser les niveaux de journalisation dans java

Je développe une application sur laquelle j'ai besoin d'utiliser la fonctionnalité de journalisation. J'ai lu sur les différents niveaux d'enregistreur qui sont:

  • SEVERE (plus haut)
  • ATTENTION
  • INFO
  • CONFIG
  • BIEN
  • FINER
  • FINEST

Je ne suis pas capable de comprendre l'utilisation de chaque niveau de journalisation.

Quelqu'un peut-il me donner un bon exemple montrant tous les niveaux de journalisation et leur utilisation?

41
vinod

En règle générale, vous n'avez pas besoin de tous ces niveaux. GRAVE, AVERTISSEMENT, INFO, FIN peuvent suffire. Nous utilisons Log4J (pas directement Java.util.logging) et les niveaux suivants (dont le nom peut différer d'autres frameworks de journalisation):

  • ERREUR: Toute erreur/exception qui est ou pourrait être critique. Notre enregistreur envoie automatiquement un courrier électronique pour chacun de ces messages sur nos serveurs (utilisation: logger.error("message");)

  • WARN: Tout message susceptible de nous avertir de problèmes potentiels, par exemple lorsqu'un utilisateur essaie de se connecter avec des informations d'identification incorrectes, ce qui peut indiquer une attaque si cela se produit souvent ou de façon brève (utilisation: logger.warn("message");)

  • INFO: Tout ce que nous voulons savoir en consultant les fichiers journaux, par exemple. quand un travail planifié a commencé/s'est terminé (utilisation: logger.info("message");)

  • DEBUG: Comme son nom l'indique, les messages de débogage que nous n'activons que rarement. (utilisation: logger.debug("message");)

L'avantage de ceci est que si vous définissez le niveau de journalisation sur WARN, les messages d'information et de débogage n'ont pratiquement aucun impact sur les performances. Si vous avez besoin d'obtenir des informations supplémentaires d'un système de production, vous pouvez simplement réduire le niveau à INFO ou DEBUG pendant une courte période (car vous obtiendrez beaucoup plus d'entrées de journal, ce qui rendra vos fichiers de journal plus gros et plus difficiles à lire). Le réglage des niveaux de journalisation, etc. peut normalement être effectué au moment de l'exécution (notre instance JBoss vérifie les modifications de cette configuration toutes les minutes environ).

52
Thomas

Cet extrait est extrait de ce qui suit post génial .

ERREUR - quelque chose de terriblement faux s'était passé, il faut enquêter immédiatement. Aucun système ne peut tolérer les éléments enregistrés à ce niveau. Exemple: NPE, base de données non disponible, le cas d'utilisation critique ne peut pas être poursuivi.

WARN - le processus peut être poursuivi, mais prenez des précautions supplémentaires. En fait, j'ai toujours voulu avoir deux niveaux ici: un pour les problèmes évidents où il existe une solution de contournement (par exemple: "Données actuelles non disponibles, utilisation de valeurs en cache") et l'autre (nommez-le: ATTENTION) pour les problèmes et suggestions potentiels. Exemple: "Application exécutée en mode de développement" ou "La console d'administration n'est pas sécurisée par un mot de passe". L'application peut tolérer les messages d'avertissement, mais ils doivent toujours être justifiés et examinés.

INFO - Le processus métier important est terminé. Dans un monde idéal, l'administrateur ou l'utilisateur expérimenté devrait être capable de comprendre les messages INFO et de savoir rapidement ce que fait l'application. Par exemple, si une application concerne uniquement la réservation de billets d'avion, il ne doit y avoir qu'une seule déclaration INFO par billet indiquant "[Qui] a réservé un billet de [Où] à [Où]". Autre définition du message INFO: chaque action qui modifie de manière significative l'état de l'application (mise à jour de la base de données, demande système externe).

DEBUG - Trucs pour les développeurs. Je discuterai plus tard du type d’information qui mérite d’être enregistré.

TRACE - Information très détaillée, destinée uniquement au développement. Vous pouvez conserver les messages de trace pendant un court laps de temps après le déploiement dans l'environnement de production, mais traiter ces instructions de journal comme temporaires, ce qui devrait ou pourrait être éventuellement désactivé. La distinction entre DEBUG et TRACE est la plus difficile, mais si vous mettez une instruction de journalisation et la supprimez une fois que la fonctionnalité a été développée et testée, elle devrait probablement se trouver au niveau de TRACE.

PS: Lire [~ # ~] trace [~ # ~] en tant que [~ # ~] verbeux [~ # ~]

19
Ragunath Jawahar

La documentation Java.util.logging.Level permet bien de définir quand utiliser un niveau de journalisation et le public cible de ce niveau de journalisation.

La confusion avec Java.util.logging Réside principalement dans les méthodes de traçage. Cela devrait être dans la documentation au niveau classe mais le champ Level.FINE Fournit un bon aperçu:

FINE est un niveau de message fournissant des informations de traçage.

Tous les types FINE, FINER et FINEST sont destinés à un traçage relativement détaillé. La signification exacte des trois niveaux variera d’un sous-système à l’autre, mais en général, FINEST devrait être utilisé pour la sortie détaillée la plus volumineuse, FINER pour une sortie un peu moins détaillée et FINE pour le plus petit volume (et le plus important).

En général, le niveau FINE doit être utilisé pour les informations qui intéresseront largement les développeurs qui ne s'intéressent pas spécifiquement au sous-système en question.

Les messages FINE peuvent inclure des problèmes tels que des échecs mineurs (récupérables). Les problèmes indiquant des problèmes de performances potentiels méritent également d'être consignés en tant que FINE.

Une chose importante à comprendre et qui n’est pas mentionnée dans la documentation de niveau est la suivante: Les informations de suivi du site d’appel sont enregistrées à FINER . Si vous enregistrez un message en tant que FINE, vous pourrez configurer le système de journalisation pour afficher la sortie du journal avec ou sans enregistrements de journal de contrôle de flux entourant le message de journal. Utilisez donc FINE uniquement lorsque les enregistrements de journal de contrôle de flux ne sont pas requis comme contexte pour comprendre ce message de suivi de journal.

PLUS FIN indique un message de traçage assez détaillé. Par défaut, les appels de journalisation pour entrer, renvoyer ou lancer une exception sont suivis à ce niveau.

En général, la plupart des utilisateurs de FINER devraient être laissés à l'appel de entrant , sortant , et jetant . Cela permettra en grande partie de réserver FINER pour le suivi du site d’appel lorsque la journalisation détaillée est activée.

FINEST indique un message de traçage très détaillé.

Utilisez FINEST lorsque le message du journal de suivi que vous êtes sur le point d'écrire nécessite des informations de contexte sur le flux de contrôle du programme. Vous devez également utiliser FINEST pour le suivi des messages générant de grandes quantités de données en sortie.

Les messages CONFIG sont destinés à fournir diverses informations de configuration statiques, afin de faciliter le débogage des problèmes pouvant être associés à des configurations particulières. Par exemple, le message CONFIG peut inclure le type de CPU, la profondeur graphique, l'apparence de l'interface graphique, etc.

Le CONFIG fonctionne bien pour aider les administrateurs du système avec les éléments énumérés ci-dessus.

En règle générale, les messages INFO sont écrits sur la console ou son équivalent. Par conséquent, le niveau INFO ne doit être utilisé que pour les messages raisonnablement significatifs et utiles pour les utilisateurs finaux et les administrateurs système.

Des exemples de ceci sont le démarrage et l'arrêt du programme de traçage.

En général, les messages WARNING doivent décrire les événements susceptibles d'intéresser les utilisateurs finaux ou les administrateurs système, ou indiquant des problèmes potentiels.

Un exemple de cas d'utilisation pourrait être une exception générée par les implémentations de AutoCloseable.close .

En général, les messages SÉVÈRES doivent décrire les événements d'une importance considérable qui empêcheront l'exécution normale du programme. Ils doivent être raisonnablement intelligibles pour les utilisateurs finaux et les administrateurs système.

Par exemple, si votre programme comporte une transaction où, si l'une des étapes échoue, toutes les étapes sont annulées, il serait approprié d'utiliser SEVERE comme niveau de journalisation.

8
jmehrens

Voici une bonne introduction à la journalisation en Java: http://www.javapractices.com/topic/TopicAction.do?Id=14

Java est fourni avec une API de journalisation depuis sa version 1.4.2: http://download.Oracle.com/javase/1.4.2/docs/guide/util/logging/overview.html

Vous pouvez également utiliser d'autres frameworks de journalisation comme Apache Log4j, qui est le plus populaire: http://logging.Apache.org/log4j

Je vous suggère d'utiliser un cadre d'abstraction de journalisation qui vous permet de modifier votre cadre de journalisation sans re-factoriser votre code. Vous pouvez donc commencer par utiliser Jul (Java Util Logging), puis passez à Log4j sans modifier votre code. La façade de journalisation la plus populaire est slf4j: http://www.slf4j.org/

Cordialement,

4
Mehrez Marouani

Ce sont les niveaux. Vous tenez compte de la gravité du message que vous enregistrez et utilisez les niveaux appropriés.

C'est fondamentalement un filigrane; plus le niveau est élevé, plus vous souhaitez conserver les informations dans l'entrée du journal. FINEST serait destiné aux messages très peu importants, vous l'utiliseriez donc pour des choses qui ne vous intéressent généralement pas mais que vous voudrez peut-être voir dans certaines circonstances rares.

2
Joseph Ottinger

L'utilisation des niveaux est vraiment pour vous. Vous devez déterminer ce qui est grave dans votre application, ce qui constitue un avertissement et quelle est simplement une information. Vous devez fractionner votre journalisation afin que vos utilisateurs puissent facilement configurer un niveau de journalisation qui ne tue pas le système avec un excès IO mais qui signalera des erreurs graves afin que vous puissiez les corriger.

1
alpian

les différents niveaux de journalisation sont utiles pour les outils dont vous pouvez analyser les fichiers de journalisation. Normalement, un fichier journal contient beaucoup d'informations. Pour éviter une surcharge d'informations (ou ici un stackoverflow ^^), vous pouvez utiliser les niveaux de journalisation pour regrouper les informations.

0
reporter

La journalisation a différents niveaux tels que:
Trace - Un message de débogage à grain fin, capturant généralement le flux dans l'application. Debug - Un événement de débogage général doit être consigné sous cela.
ALL - Tous les événements peuvent être enregistrés.
INFO - Un but informatif, des informations écrites en anglais simple.
Warn - Un événement pouvant éventuellement conduire à une erreur.
Error - Une erreur dans l'application, éventuellement récupérable.

La journalisation capturée avec le niveau de débogage est une information utile aux développeurs ainsi qu’aux autres membres du personnel; Si votre code ne comporte ni exception ni erreur, vous devriez pouvoir utiliser le niveau de journalisation DEBUG, sinon vous devez choisir avec soin les options.

0
surendrapanday