2012-04-03 7 views
6

Ich benutze Apache Commons Bibliothek und log4j. Ich habe eine XML-Konfigurationsdatei und eine log4j.properties-Dateien. Ich möchte meinen log4j-Eigenschaftenpfad in meiner XML-Konfigurationsdatei angeben. meine Einstellungen laden i tun:log4j Warnung Problem - Apache Commons

//Loading my xml file 
this.config = new XMLConfiguration(this.xmlFileName); 

In diesem Moment die folgenden Warnungen ausgelöst werden:

log4j:WARN No appenders could be found for logger (org.apache.commons.configuration.ConfigurationUtils). 
log4j:WARN Please initialize the log4j system properly. 
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. 

Allerdings habe ich bisher noch nicht log4j Objekt aufgerufen. Sobald ich die XML-Datei gelesen habe, kann ich erfolgreich mit meiner log4j-Instanz arbeiten. Gibt es eine Möglichkeit, diese Warnungen zu entfernen?

Antwort

1

Log4J Ausgänge dieser Fehler, wenn ein Logger erstellt wird, aber kein appender (n) ist (sind) definiert. In der Praxis tritt dieser Fehler auf, wenn ein Logger erstellt wird, bevor log4j initialisiert wird.

Sie sagen, Sie haben kein log4j-Objekt aufgerufen. Aber in der Fehlermeldung sehen Sie, dass org.apache.commons.configuration.ConfigurationUtils ein Logger-Objekt erstellt (siehe Zeile 66).

Man könnte es vor der Initialisierung ausschalten, siehe How to turn off log4j warnings?

Logger.getRootLogger().setLevel(Level.OFF); 

Es sollte keine Notwendigkeit, es wieder einzuschalten, da die Initialisierung normalerweise die Protokollebene des Wurzel Logger setzt.

+0

Ok, gibt es eine Möglichkeit, LOG innerhalb der 'org.apache.commons.configuration.ConfigurationUtils' zu deaktivieren oder meine log4j-Eigenschaften zu konfigurieren, die in meiner XML-Konfiguration enthalten sind? – PapaSmurf

4

überprüfen Sie, ob die log4j.properties Datei im Classpath ist

Dieser Link könnte nützlich sein: http://www.coderanch.com/t/63230/open-source/log-log-WARN-No-appenders

+0

Ich will nicht meine log4j.properties im Classpath einsetzen, weil es in das Gefäß außen platziert ist und in einem anderen Verzeichnis. Ich möchte es zur Laufzeit laden, indem ich den Pfad verwende, der in meiner Anwendungskonfigurationsdatei angegeben ist. – PapaSmurf

0

Sie sollten zumindest die appender und die Logger Ebene für den Root-Logger in dem geladenen log4j eingestellt Konfigurationsdatei. Andernfalls sehen Sie diese Warnmeldung.

Beispiel die appender und Loggers Pegel für den Root-Logger des Einstellens:

#Set root logger 's level and its appender to an appender called CONSOLE which is defined below. 
log4j.rootLogger=DEBUG, CONSOLE 

#Set the behavior of the CONSOLE appender 
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender 
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout 
log4j.appender.CONSOLE.layout.ConversionPattern=%d [%t] %-5p %c - %m%n 
0

ich mein Problem mit dieser Problemumgehung beheben:

//Disable log level 
Logger.getRootLogger().setLevel(Level.OFF); 

Jetzt kann ich ohne WARNHINWEISE meine XML-Konfigurationsdatei lesen.
Nach Satz Protokollebene:

Logger.getRootLogger().setLevel(Level.INFO); 
+0

Ist das nicht die Lösung, die ich in meinem Kommentar unter meiner Post vorgeschlagen habe? – ChrLipp

Verwandte Themen