Quelle est la signification de log4j.rootLogger
propriété dans log4j.properties
fichier? Que se passe-t-il si je n'utilise pas cette propriété?
Exemple:
# Set root logger level to DEBUG and its only appender to A1.
log4j.rootLogger=DEBUG, A1
# A1 is set to be a ConsoleAppender.
log4j.appender.A1=org.Apache.log4j.ConsoleAppender
Que se passe-t-il si je définit cette propriété sur ERROR
mode?.
Samudra Gupta explique dans son livre1:
L'objet
Logger
est l'objet principal utilisé par un développeur d'application pour consigner un message. Les objetsLogger
agissant dans une instance particulière d'une application suivent une hiérarchie parent-enfant .
Si vous avez la configuration suivante:
log4j.rootLogger=WARN, stdout
log4j.appender.stdout=org.Apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.Apache.log4j.SimpleLayout
log4j.logger.com.me.proj2=INFO
Voici comment la hiérarchie des enregistreurs pourrait se retrouver:2
Samudra Gupta continue à expliquer:
Un enregistreur racine se trouve au sommet de la hiérarchie. L'enregistreur racine existe en dehors de la portée de toute hiérarchie d'enregistreurs personnalisée que nous pouvons établir. Il existe toujours en tant que consignateur racine pour toutes les hiérarchies de consignateurs possibles et il n'a pas d'espace de nom. Tous les autres objets
Logger
spécifiques à l'application sont des objets enfants du logger racine. La relation parent-enfant des enregistreurs signifie la dépendance des enregistreurs agissant au sein de la même application. Un enregistreur enfant peut hériter des propriétés de son enregistreur parent de manière récursive dans l'arborescence. Généralement, un consignateur enfant hérite des propriétés suivantes de son consignateur parent:
Level
: Si le logger enfant n'a pas de niveau d'arborescence explicite spécifié, il utilisera le niveau de son parent le plus proche ou le premier niveau correct qu'il trouve récursivement dans la hiérarchie.Appender
: S'il n'y a pas d'appendeur attaché à un enregistreur, l'enregistreur enfant utilise l'appendeur de l'enregistreur parent le plus proche ou le premier appendeur qu'il trouve récursivement dans l'arborescence.ResourceBundle
:ResourceBundles
sont des fichiers de propriétés de modèle clé-valeur utilisés pour la localisation des messages de journalisation. Un enregistreur enfant hérite deResourceBundle
associé à son enregistreur parent.
[~ # ~] note [~ # ~]
1 Samudra Gupta, Pro Apache Log4j, Deuxième édition (Berkeley, CA: Apress, 2005), 24-25, ISBN13: 978-1-59059-499-5
2 Dominic Mitchell, Connexion à Java, http://happygiraffe.net/blog/2008/09/03/logging-in-Java/ , récupéré le 26 mai 2014 .
Répondre
Que se passe-t-il si je n'utilise pas cette propriété?
Si vous ne définissez pas rootLogger sur un niveau et un appender, vous recevrez un avertissement.
Par exemple, si vous omettez ou commentez la ligne log4j.rootLogger=DEBUG, stdout
, c’est-à-dire que votre fichier log4j.properties contient uniquement le rootlogger et aucun autre enregistreur, ici l’enregistreur racine faisant l’objet d’un commentaire:
#log4j.rootLogger=DEBUG, stdout
log4j.appender.stdout=org.Apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.Apache.log4j.SimpleLayout
Vous obtiendrez quelque chose comme la sortie suivante:
log4j:WARN No appenders could be found for logger (log4jtests.Log4jHelloWorld).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.Apache.org/log4j/1.2/faq.html#noconfig for more info.
La propriété log4j.rootLogger définit le niveau (DEBUG ici) et Appender (A1 ici) pour l'enregistreur racine. Ce n'est pas obligatoire. L'enregistreur racine n'a pas d'appender par défaut et il peut exister sans appender. Ainsi, votre fichier de propriétés log4j peut être sans que cette propriété soit définie.
L'enregistreur racine est l'enregistreur le plus élevé dans la hiérarchie log4j, similaire à la classe Object en Java.