wiederholt die Protokollierung in log4j in Java
Frage
Ich habe log4j in einem Java-Programm. Ich initialisiert es mit:
BasicConfigurator.configure(); // logger configuration
try {
logger.setLevel(Level.DEBUG);
} catch (Exception e) {
System.out.println("Logfile not found");
}
Aber, während der Ausführung des Programms i erhalten 3 log Aussagen anstelle von einem. Zum Beispiel:
3 lines
1047 [main] INFO ibis.Preproc.Ratings - Added AS TIMEZONE to tZones[0] = GMT-12:00
1047 [main] INFO ibis.Preproc.Ratings - Added AS TIMEZONE to tZones[0] = GMT-12:00
1047 [main] INFO ibis.Preproc.Ratings - Added AS TIMEZONE to tZones[0] = GMT-12:00
anstelle einer Zeile
1047 [main] INFO ibis.Preproc.Ratings - Added AS TIMEZONE to tZones[0] = GMT-12:00
Gibt es irgendwelche zusätzliche Konfigurationen log4j getan werden, um dies zu vermeiden?
Lösung
Ich habe ein ähnliches Verhalten erlebt, und es stellte sich heraus, dass Log4J wurde mehr als einmal konfiguriert; mit dem BasicConfigurator, sondern auch mit einer Datei log4j.xml ich vergessen hatte. Könnte es sein, dass eine zusätzliche es Log4J Konfiguration irgendwo auf dem Classpath?
Andere Tipps
Die meisten wahrscheinlich Sie haben mehr als ein Appen. Siehe das log4j Handbuch (Abschnitt: Appen und Layout):
Jede aktivierte Protokollierung Anforderung für einen bestimmten Logger sowie der Appen höher in der Hierarchie zu all Appen in diesem Logger weitergeleitet werden.
Sie können versuchen, die additiv Flag auf false setzen.
Nun, Sie haben nicht gezeigt, wie Ihr Programm ausgeführt wird. Hier ist ein komplettes Programm, das nur eine einzige Zeile zeigt:
import org.apache.log4j.*;
public class Test
{
public static void main(String[] args)
{
BasicConfigurator.configure(); // logger configuration
Logger logger = Logger.getLogger(Test.class);
logger.setLevel(Level.DEBUG);
logger.info("Hello");
}
}
Ist es möglich, dass Ihr Code wirklich dreimal ausgeführt wird?
In meinem Fall wurde ich das Hinzufügen eines neuen appender jedes Mal, wenn ich die BasicConfigurator.configure () aufgerufen.
Ich löste es Reseting die Konfiguration:
BasicConfigurator.resetConfiguration() //reset first
BasicConfigurator.configure() // then configure
Ich muss gestehen, dass ich nicht klar verstehen, was los ist, aber es gelöst sicherlich mein Problem.