warum log4j nicht anmelden, um die Dateien, die ich konfiguriert es mit einem log4j.xml Datei?
Habe ich diese in verschiedenen Umgebungen und habe noch nie eine konsistente Erklärung. Ich habe gehört Kommentare über den Tomcat-container als 'chaotisch', mit der verschiedene logging-Implementierungen möglicherweise in es, und dann meine app oder der classloader nicht wissen, welche Konfiguration zu verwenden.
Dies ist einer jener wahnsinnigen Szenarien, wenn die Anmeldung einmal geklappt und dann nicht melden Sie sich eine Stunde später, ohne änderungen an der log4j.xml Datei. Ich habe meine log4j.xml Datei in die root meiner /src-Verzeichnis, so wird es eingesetzt, um die Wurzel des /WEB-INF/classes-Verzeichnis. Ich bin mit Java 6, Tomcat 6, und es ist eine GWT 2.3-app, läuft von innen Eclipse Helios auf einem Windows 7-Rechner.
Für was es Wert ist, hier ist die log4j.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" >
<log4j:configuration>
<appender name="stdout" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{ABSOLUTE}
%5p %c{1}:%L - %m%n"/>
</layout>
</appender>
<appender name="fileAppender" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="${catalina.home}/logs/log4j.log"/>
<param name="DatePattern" value="'.'yyyy-MM-dd"/>
<param name="Append" value="true"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d
%-5p [%c{1}] %m %n" />
</layout>
</appender>
<root>
<priority value="debug"></priority>
<appender-ref ref="fileAppender"/>
</root>
</log4j:configuration>
hier ist, wie bekomme ich die logger in meiner Klasse, dass das logging
protected static Logger m_logger = Logger.getLogger(RemoteLoggingServiceImpl.class);
dann tatsächlich log ich einfach
m_logger.debug("my log message");
Mit dem obigen code, es muss nicht schreiben, um die logj4.log-Datei.
Dann habe ich versucht, die folgenden, die er bekam logging log4j.log-Datei, aber nicht die otherFile.log-Datei wie ich es erwartet habe. Hier ist die aktualisierte log4j.xml Datei :
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" >
<log4j:configuration>
<appender name="stdout" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{ABSOLUTE}
%5p %c{1}:%L - %m%n"/>
</layout>
</appender>
<appender name="fileAppender" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="${catalina.home}/logs/log4j.log"/>
<param name="DatePattern" value="'.'yyyy-MM-dd"/>
<param name="Append" value="true"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d
%-5p [%c{1}] %m %n" />
</layout>
</appender>
<appender name="otherFileAppender" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="${catalina.home}/logs/otherFile.log"/>
<param name="DatePattern" value="'.'yyyy-MM-dd"/>
<param name="Append" value="true"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d
%-5p [%c{1}] %m %n" />
</layout>
</appender>
<root>
<priority value="debug"></priority>
<appender-ref ref="fileAppender"/>
</root>
<logger name="com.mypackage.myLoggingClass">
<level value="debug"/>
<appender-ref ref="otherfileAppender"/>
</logger>
</log4j:configuration>
und ich erstellen dieser logger mit diesem statt :
protected static Logger m_logger = Logger.getLogger("com.mypackage.myLoggingClass");
Kann mir jemand erklären, warum es nicht melden in den ersten Szenario, und/oder warum es Protokolle zu log4j.melden Sie aber nicht otherFile.log in das 2. Szenario?
- Ich bin mit log4j version 1.2.9
Du musst angemeldet sein, um einen Kommentar abzugeben.
First off, die Sie nicht auflisten, welche version von Log4j, die Sie verwenden, so bin ich davon ausgegangen, dass Sie eine relativ aktuelle version von Log4j.
Den ersten block der Beispiel-code, den Sie zur Verfügung gestellt:
Haben Sie nicht geändert, das logging-level des root-appender. Pro die
log4j 2.x Dokumentation
Um die logger-Ausgabe in die Datei in dem ersten Beispiel, das Sie brauchen, um Ihre root-logger:
Ein guter Indikator, dass das debug-logging nicht funktioniert ist, dass man sich nicht gesehen haben, keine Ausgabe auf der Konsole, da die Standard-logging-level auf "error". Ich habe immer gerne eine console appender auf meinem Logger, so dass ich sehen kann, dass meine Bewerbung eigentlich Protokollierung.
Im zweiten Beispiel, das root-logger nicht anmelden, um die Datei für genau den gleichen Gründen wie im ersten Beispiel. Aber Sie haben es geschafft, die "com.MeinPaket.myLoggingClass" logger korrekt, das ist der Grund, warum Ihre Anwendung die debug-Ausgabe wenn Sie die "com.MeinPaket.myLoggingClass" class based logger.
Soweit ich sehen kann alle Ihre ursprünglichen Annahmen korrekt sind, und das Protokoll gedruckt werden soll, so hier ein paar Dinge, die ich überprüfen Sie in diesem Fall:
Ihre JRE verwendet eine Datei namens
logging.properties
um die Handler und die log-Level und ein paar andere Einstellungen geteilt werden weltweit über alle Java-Befehle.Viele Male seine gesehen, die Standardeinstellung ist
handlers= java.util.logging.ConsoleHandler
haben, können Sie versuchen Siejava.util.logging.FileHandler
wie unten.Auch versuchen, Einstellung der Datei-Formatierer zu SimpleFormatter anstelle von XML-formatter