Ich habe gerade eine bestehende Webanwendung bei der Arbeit abgeholt, die ihre Aktivität mit Log4J protokollieren soll. Ich habe meinen Arbeitsbereich genau so konfiguriert, wie mir gesagt wurde, und alles andere (db-Verbindung, Authentifizierung, etc ...) funktioniert einwandfrei, außer dass nichts in die Protokolldatei geschrieben wird. Andere ähnliche Anwendungen haben keine Problemprotokollierung.Log4J protokolliert nichts
Ich habe die WebSphere-Konsole beim Start der Anwendung angeschaut und dort sind keine Fehler, die darauf hinweisen könnten, warum Log4J nicht protokolliert.
Ich erwähnte dies zu einem anderen Entwickler (wer einmal an dieser Anwendung gearbeitet hat, aber nicht für eine Weile und ist veralteter als ich bin), der bemerkte, dass es sehr seltsames Verhalten war, aber hatte keine Ahnung warum protokolliert möglicherweise nicht und meldet keine Fehler.
Ich habe über die Konfigurationsdatei und Eigenschaften Datei und alles sieht OK. Ich vermute, dass Log4J nie die log4j.xml liest, aber ich bin mir nicht sicher. Es ist schon eine Weile her, seit ich mit Log4J gearbeitet habe - hat jemand ein paar gute Tipps zur Fehlersuche bei dieser Art von Problem?
PS: Es gibt Instanzen dieser Anwendung, die auf verschiedenen Test-/QA-/Prod-Servern bereitgestellt werden, und diese Instanzen protokollieren alle ordnungsgemäß. Es ist nur auf lokalen Arbeitsstationen, die Protokollierung scheint stillschweigend zu versagen.
Update: So scheint es ein Problem mit dem Weg, um die Anwendung bereitgestellt wird. Ich habe den Classloader-Modus auf "Parent Last" geändert und ich kann sehen, dass die Log4J-Datei jetzt zumindest gelesen wird. Und die erste Aktion, die ich versuche, löst einen ClassNotFoundException
aus, der besagt, dass org.apache.commons.logging.impl.Log4jFactory
nicht gefunden werden kann.
2. Update: Ich habe etwas Fremden bemerkt ... Die Anwendung hat zwei WAR-Projekte - einer von ihnen ist für die Benutzeroberfläche und die andere ist für einige Web-Services. Das Projekt, das für die UI ist, ist erfolgreich Protokollierung seiner Vorgänge in der Protokolldatei. Das Web-Service-Projekt ist das, das mit der ClassNotFoundException
fehlschlägt. Beide haben commons-logging.jar als JavaEE-Modulabhängigkeit aufgelistet, und keine von ihnen hat eine projektspezifische Protokollierungskonfiguration (alle Konfigurationsdateien befinden sich in einem Resources-Projekt). Ein wichtiger Unterschied ist, dass dieses UI-Projekt einige andere Inhouse-Frameworks enthält (vorkompiliert als JARs), die bereits die notwendigen Protokollierungskonfigurationen enthalten. Vielleicht liegt das an dem Unterschied.
Ich habe auch versucht, die Antwort zu verwenden (eine Datei mit dem Namen org.apache.commons.logging.LogFactory in den META-INF/services mit einer Zeile, die enthält: "org.apache.commons.logging.impl.Log4jFactory") von dieser Frage: Websphere all logs are going to SystemOut.log aber es schien nicht zu helfen.
Welche Art von Logger-Instanz ist das? Wie in RollingFileAppender – Woot4Moo
@ Woot4Moo: Es ist ein FileAppender. – FrustratedWithFormsDesigner
Können Sie Ihre Konfigurationsdatei posten? Sind die Einstellungen in allen Umgebungen identisch? – evanwong