2016-04-15 5 views
0

Ich benutze log4j 1.2.17. Ich habe versucht, log4j.properties zu konfigurieren, so dass Nachrichten in die Konsole und eine Protokolldatei geschrieben werden. Das Schreiben von Nachrichten in die Konsole funktioniert einwandfrei. Ich sehe nur einen Eintrag pro Protokollnachricht in die Protokolldatei geschrieben. Doppelte Nachrichten werden jedoch in die Protokolldatei geschrieben. Mit anderen Worten, für jede in das Protokoll geschriebene INFO wird zweimal geschrieben. Ich habe versucht, mit Additivität zu kontrollieren, aber es scheint nicht zu funktionieren. Was müsste ich tun, um dieses Verhalten zu korrigieren?log4j: Konfiguration bewirkt, dass doppelte Nachrichten in die Protokolldatei geschrieben werden

log4j.rootLogger=ERROR, R, C 

log4j.appender.R=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.R.File=${catalina.base}/logs/storefrontPing.log 
log4j.appender.R.DatePattern='.'yyyy-MM-dd 
log4j.appender.R.layout=org.apache.log4j.PatternLayout 
log4j.appender.R.layout.ConversionPattern=%d %t [%-5p] %c - %m%n 
log4j.appender.R.Append = true 
log4j.additivity.R = false 

log4j.appender.C=org.apache.log4j.ConsoleAppender 
log4j.appender.C.layout=org.apache.log4j.PatternLayout 
log4j.appender.C.layout.ConversionPattern=%d{ABSOLUTE} %-5p [%c{1}] %m%n 
log4j.appender.C.Target=System.out 
log4j.additivity.C = false 

log4j.logger.org.apache=ERROR, R 
log4j.logger.org.apache=ERROR, C 

log4j.logger.com.aktion.storefront.ping=INFO, C 
log4j.logger.com.aktion.storefront.ping=INFO, R 

REVISED

Ich änderte meine log4j.properties auf die folgende Datei. Jetzt bekomme ich die Protokollnachricht in die Konsole geschrieben, aber nichts in die Protokolldatei geschrieben.

log4j.rootLogger=ERROR, R, C 

log4j.appender.R=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.R.File=${catalina.base}/logs/storefrontPing.log 
log4j.appender.R.DatePattern='.'yyyy-MM-dd 
log4j.appender.R.layout=org.apache.log4j.PatternLayout 
log4j.appender.R.layout.ConversionPattern=%d %t [%-5p] %c - %m%n 
log4j.appender.R.Append = true 

log4j.appender.C=org.apache.log4j.ConsoleAppender 
log4j.appender.C.layout=org.apache.log4j.PatternLayout 
log4j.appender.C.layout.ConversionPattern=%d{ABSOLUTE} %-5p [%c{1}] %m%n 
log4j.appender.C.Target=System.out 

log4j.logger.com.aktion.storefront.ping=INFO 

Antwort

1

Appender additivity ist nicht auf dem Appen konfiguriert, aber auf dem Logger (https://logging.apache.org/log4j/1.2/manual.html#additivity)

Da Sie bereits Ihren Appen zum Root-Logger hinzugefügt, Sie brauchen nicht zu einem späteren Zeitpunkt wieder hinzuzufügen. Sie sollten Ihre zusätzlichen Logger nur mit den gewünschten Protokollebenen definieren:

log4j.logger.org.apache=ERROR 
log4j.logger.org.apache=ERROR 

log4j.logger.com.aktion.storefront.ping=INFO 
log4j.logger.com.aktion.storefront.ping=INFO 

Und da Sie zum org.apache Logger nicht die Protokollebene aus dem Stammlogger ändern, können Sie sogar diejenigen auslassen:

#log4j.logger.org.apache=ERROR 
#log4j.logger.org.apache=ERROR 

log4j.logger.com.aktion.storefront.ping=INFO 
log4j.logger.com.aktion.storefront.ping=INFO 
+0

Ich habe Ihre Änderungen versucht. Jetzt erhalte ich eine Protokoll-INFO-Nachricht, die in die Konsole geschrieben wurde, aber nichts in die Protokolldatei geschrieben wurde. Ich habe eine überarbeitete log4j.properties-Datei aufgenommen, die jetzt in meiner Frage enthalten ist. Habe ich etwas falsch gemacht? –

+0

Mein schlechtes. Das Problem war, wie ich meinen lokalen Tomcat-Server in Eclipse definiert hatte. Das funktioniert. Vielen Dank! –

0

additivity sollte auf Logger Ebene festgelegt werden, nicht appender, so in Ihrem Fall entfernen Linien folgende:

log4j.additivity.R = false 
log4j.additivity.C = false 

und fügen:

log4j.additivity.org.apache=false