2009-03-07 6 views
0

Ich verwendete log4j in einem Java-Programm. Ich initialisierte es mit:wiederholte Anmeldung in Log 4j in Java

Aber während der Ausführung des Programms bekomme ich 3 Log-Anweisungen statt einer. 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 

statt einer Linie

1047 [main] INFO ibis.Preproc.Ratings - Added AS TIMEZONE to tZones[0] = GMT-12:00 

Gibt es zusätzliche Konfigurationen log4j dies zu vermeiden, zu tun?

Antwort

4

Ich habe ähnliches Verhalten erlebt, und es stellte sich heraus, dass Log4J mehr als einmal konfiguriert wurde; mit dem BasicConfigurator, aber auch mit einer log4j.xml-Datei, die ich vergessen hatte. Könnte es sein, dass sich irgendwo auf dem Klassenpfad eine zusätzliche Log4J-Konfiguration befindet?

2

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?

4

Höchstwahrscheinlich haben Sie mehr als einen Appender. Siehe den log4j manual (Abschnitt: Appen und Layout):

Jede aktivierte Protokollierung Anforderung für einen bestimmten Logger wird weitergeleitet an all Appen in diesem Logger sowie der Appen höher in der Hierarchie.

Sie können versuchen, das Additivitäts-Flag auf false zu setzen.

0

In meinem Fall habe ich jedes Mal einen neuen Appender hinzugefügt, wenn ich den BasicConfigurator.configure() aufgerufen habe.

Ich löste es die Konfiguration Reseting:

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.