2011-01-04 8 views
1

Situation Anmeldung: Ich habe diesen log4j Logger:Logger.setLevel() ermöglicht nicht richtig

private static final Logger logger = Logger.getLogger(ThisClassName.class); 

und ich versuche, es zu setzen programmatisch durch:

Logger.getLogger(ThisClassName.class).setLevel(Level.DEBUG); 

Noch DEBUG Ebene Drucke werden verschluckt (während INFO-Ausdrucke erfolgreich gedruckt werden).

Auch hat dieses Bit keine Wirkung: Logger.getRootLogger().setLevel(Level.DEBUG);

Aufruf logger.debug ("foo") erreicht Category.forcedLog() und ConsoleAppender.doAppend(), und schlägt dann fehl (beendet) an:

if(!isAsSevereAsThreshold(event.getLevel())) 

Jede Idee, warum das so ist Ereignis?

+0

Haben Sie irgendwo eine Konfigurationsdatei, deren Wert in Konflikt mit Ihren programmatischen Einstellungen stehen könnte? – justkt

+0

@justky - Ich habe alle 8 log4j.properties-Dateien durchsucht, die in unserem Projekt verstreut sind, und keiner von ihnen hat eine Ebene auf einem Appender. – ripper234

Antwort

1

Ihr Appender ist mit einem Schwellenwert konfiguriert, der größer ist als debug. Wenn also der Logger die Einträge nicht ignoriert, zeichnet Ihr Appender diesen nicht auf. Sie müssen die Schwelle Ihrer ConsoleAppender seine DEBUG auch entweder durch die Konfigurationsdatei oder programmatisch konfigurieren:

((ConsoleAppender)someLogger.getAppender("CONSOLE")).setThreshold(Level.DEBUG); 

Config-Dateien in der Regel für diese Art der Sache die elegantere Lösung.

bearbeiten: Beachten Sie, dass jede Unterklasse von AppenderSkeleton (einschließlich ConsoleAppender) shouldn't have a threshold filter set by default offenbar. Es ist also wahrscheinlich, dass Sie irgendwo in Ihrer Konfiguration manuell einen Schwellenwert (> Debug) diesem Appender zuweisen, wie @justkt andeutet.

+1

Die Konfigurationsdatei kann eine Datei sein, die mit einem Anwendungsserver geliefert wird (z. B. JBoss ist standardmäßig INFO) und nicht eine, die das OP selbst eingerichtet hat. Es ist ratsam, sich nach ihm umzusehen, um es zu verifizieren. – justkt

+0

Ich führe dies als eine eigenständige Java-Klasse (eigentlich aus IntelliJ). Siehe meinen Kommentar zu der Frage - Ich habe keine schlechte Appender-Konfiguration in log4j.properties-Dateien gefunden. Die Einstellung der Schwelle hat funktioniert (ich habe es auf dem Root-Logger getan) – ripper234