Log4j: plusieurs enregistreurs, niveaux et appenders
J'ai des problèmes avec les messages de journal en double lors de l'écriture dans plusieurs fichiers journaux en utilisant log4j.
, À l'heure actuelle, je suis en train de log INFO
niveau des données (et plus) pour le bûcheron nommé foobar mon foo.log
fichier, puis tous les WARN
niveau des messages de journal (et plus) de tous les enregistreurs dans le bar.log
fichier.
À la suite de cela, les messages de journal en double ont été écrits dans le fichier foo.log
(chaque ligne a été enregistrée deux fois) et après quelques recherches rapides, Je trouvé que la suggestion de résoudre ce problème était d'ajouter log4j.additivity.foobar=false
à mon fichier de propriétés.
Le problème avec ceci est que bien qu'il arrête les lignes en double, le message WARN
de l'enregistreur foobar ne sont jamais écrits dans le fichier bar.log
.
Mon fichier de propriétés log4j est le suivant:
log4j.rootLogger = WARN, FOO, BAR
log4j.logger.foobar = INFO, FOO
log4j.additivity.foobar = false
log4j.appender.FOO = org.apache.log4j.RollingFileAppender
log4j.appender.FOO.layout = org.apache.log4j.PatternLayout
log4j.appender.FOO.layout.ConversionPattern = %d{ISO8601} %-5p %c ~ %m%n
log4j.appender.FOO.File = foo.log
log4j.appender.BAR = org.apache.log4j.RollingFileAppender
log4j.appender.BAR.layout = org.apache.log4j.PatternLayout
log4j.appender.BAR.layout.ConversionPattern = %d{ISO8601} %-5p %c ~ %m%n
log4j.appender.BAR.File = bar.log
Est-ce que quelqu'un sait comment je peux écrire les messages de journal dans les deux fichiers journaux (comme c'était le cas avant que je commence à définir la propriété additivity
) et empêche toujours le journal en double les messages?
veuillez noter qu'il s'agit d'un résumé simplifié du problème. Dans le scénario du monde réel, il y a plusieurs enregistreurs et plus de deux fichiers journaux
1 réponses
Ce problème peut être résolu en deux parties.
1. Empêcher les messages de journal en double
Les messages du journal ont été écrits deux fois parce que nous avons listé le FOO appender dans le rootLogger et le log4j.logger.foobar catégorie. Nous devons donc supprimer l'appender et définir uniquement le niveau de journalisation dans category:
log4j.rootLogger = WARN, FOO, BAR
log4j.logger.foobar = INFO
Cela signifie que les messages de niveau INFO de log4j.logger.foobar sont propagées vers le haut à tous les enregistreurs de la appenders dans rootLogger, mais ne seront écrites dans chaque fichier journal une fois.
2. Empêcher le message de niveau D'information d'être écrit à la barre.log
Depuis tous les messages du journal de niveau INFO pour le log4j. logger.la catégorie foobar est héritée par les appenders dans rootLogger , nous devons arrêter l'appender BAR
pour enregistrer les messages de niveauINFO .
Nous pouvons y parvenir en définissant le seuil propriété sur la barre Annexe elle-même:
log4j.appender.BAR.Threshold = WARN
Cela empêchera les instructions de niveauINFO d'être enregistrées dans la barre .enregistrez le fichier car il n'acceptera que les niveaux de WARN et plus.
Donc, le fichier de propriétés log4j complet serait comme suit:
log4j.rootLogger = WARN, FOO, BAR
log4j.logger.foobar = INFO
log4j.appender.FOO = org.apache.log4j.RollingFileAppender
log4j.appender.FOO.layout = org.apache.log4j.PatternLayout
log4j.appender.FOO.layout.ConversionPattern = %d{ISO8601} %-5p %c ~ %m%n
log4j.appender.FOO.File = foo.log
log4j.appender.FOO.Threshold = INFO
log4j.appender.BAR = org.apache.log4j.RollingFileAppender
log4j.appender.BAR.layout = org.apache.log4j.PatternLayout
log4j.appender.BAR.layout.ConversionPattern = %d{ISO8601} %-5p %c ~ %m%n
log4j.appender.BAR.File = bar.log
log4j.appender.BAR.Threshold = WARN