Log4J loggen nicht alles
Ich nahm einfach eine bestehende web-Anwendung bei der Arbeit, soll melden Sie Ihre Aktivität unter Verwendung von Log4J. Ich habe konfiguriert meinem Arbeitsbereich genau, wie mir gesagt wurde, und alles andere (db-Verbindung, Authentifizierung, etc...) funktioniert einwandfrei außer das das nichts wird in die Protokolldatei geschrieben. Andere ähnliche Anwendungen haben keine Probleme bei der Anmeldung.
Ist, habe ich mich an die WebSphere-Konsole beim starten der Anwendung gibt es keine Fehler gibt, die zeigen könnten, warum Log4J ist die Protokollierung nicht.
Erwähnte ich dies zu einem anderen dev (wer arbeitete einst für diese Anwendung, aber nicht für eine Weile und ist noch mehr veraltet, als ich es bin), der meinte, es war sehr seltsam Verhalten, hatte aber keine Ahnung, warum es möglicherweise nicht zu melden und nicht melden Sie etwaige Fehler.
Habe ich Weg über die config Datei und Eigenschaften-Datei und alles sieht OK. Ich vermute, dass Log4J ist nie auch nur das Lesen der log4j.xml aber ich bin mir nicht sicher. Es ist schon eine Weile her, seit ich gearbeitet habe, mit Log4J - hat jemand ein paar gute Tipps, "trouble-shooting" diese Art von problem?
PS: Es gibt Instanzen, die von dieser Anwendung bereitgestellt werden, um verschiedene test - /QS - /prod-Server und diese Instanzen alle log-in Ordnung. Es ist nur auf den lokalen Arbeitsstationen, die Anmeldung scheint im hintergrund fehl.
Update: es scheint also So zu sein, ein problem mit der Art, wie die Anwendung bereitgestellt wird.
Ich habe die classloader-Modus auf "Parent Last" und ich kann sehen, dass die Log4J Datei zumindest Lesen jetzt. Und die erste Aktion, ich Versuch löst eine ClassNotFoundException
sagen, dass org.apache.commons.logging.impl.Log4jFactory
kann nicht gefunden werden.
2. Update:
Ich habe bemerkt etwas Fremd... Die Anwendung hat zwei KRIEG-Projekte - eines davon ist das UI und die andere ist für einige web-services. Das Projekt, das sich für den UI - ist erfolgreicher Anmeldung Ihre Operationen auf die log-Datei. Der web-service-Projekt ist die eine, die schlägt mit der ClassNotFoundException
. Beide haben commons-logging.jar gelistet als Java ee-Modul-Abhängigkeit, und keiner von Ihnen eine Projekt-spezifische logging-Konfiguration (alle config-Dateien in einer Ressourcen-Projekt).
Einen großen Unterschied, ist, dass das UI-Projekt enthält einige andere in-house frameworks (pre-kompiliert als JARs), die könnte enthalten bereits die notwendigen logging-Konfigurationen und vielleicht das ist, wo der Unterschied ist.
Ich auch versucht, die Antwort (eine Datei mit dem Namen org.apache.Unterhaus.die Protokollierung.LogFactory in der META-INF/services mit einer Zeile enthält: "org.apache.Unterhaus.die Protokollierung.impl.Log4jFactory") von dieser Frage: Websphere sind alle logs werde SystemOut.melden aber es schien nicht zu helfen.
Es ist ein FileAppender.
Ich würde anfangen, die Einführung eines Fehlers in der log4j Konfigurationsdatei, so dass es explodiert, während der Initialisierung, nur um zu überprüfen, dass die Datei gelesen wird.
Log4j ist berüchtigt für nicht das Lesen aus der config-Datei, die Sie denken, es ist zu Lesen. (Oder eher, schlecht geschriebene Anwendungen sind berüchtigt für missbräuchlich log4j diese Weise.) Was ich tun würde, ist, platzieren Sie Haltepunkte in der log4j-Konfiguration-Klassen zu sehen, die man aufgerufen wird und wo Sie Lesen.
Excelent! Sie fand eine der schrägsten Quelle von Fehlern WAR. Eine schnelle Lösung wäre, commons-logging-app.
InformationsquelleAutor FrustratedWithFormsDesigner | 2012-06-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Siehe diese Antwort:
Wie zu initialisieren log4j richtig?
-Dlog4j.debug ist sehr nützlich für Probleme wie dieses
InformationsquelleAutor davidfrancis
Die jüngste Sache, die ich geändert habe, dass endlich die Protokollierung ordnungsgemäß funktioniert, war die änderung der classloader-Modus auf "PARENT_FIRST" und KRIEG classloader-Richtlinie zur "Anwendung". Die Standard-Konfiguration wurde "PARENT_FIRST"/"Modul". Ich geändert es zu "PARENT_LAST"/"Anwendung" auf den Rat einer Mitarbeiterin, sagt die Protokollierung funktioniert für Sie-und dies ist die einzige änderung, die Sie machen, wenn Sie erstellen Sie eine neue sandbox für diese Anwendung. Ich bin mir nicht sicher, warum ich gehen musste mit "PARENT_FIRST"/"Anwendung", aber zumindest funktioniert es jetzt.
UPDATE:
Ich versuchte einrichten eines neuen workspace und ich hatte das gleiche problem. Es stellt sich heraus, Sie brauchen "PARENT_FIRST"/"Anwendung" UND eine Datei mit dem Namen org.apache.Unterhaus.die Protokollierung.LogFactory in der META-INF/services mit einer Zeile enthält: "org.apache.Unterhaus.die Protokollierung.impl.Log4jFactory". Nicht mit der Datei bewirkt, dass die Protokollierung zu scheitern (in der Regel mit einer Meldung, die besagt, dass eine Log4J nicht gefunden werden kann).
InformationsquelleAutor FrustratedWithFormsDesigner
Ich weiß, das ist nicht genau die gleiche Symptome, aber es gibt bekannte Probleme mit log4j falls Ihre Anwendung (oder alles, was es verwendet wird) verwendet, Commons Logging. Sehen Sie, wenn diese Frage/Antwort relevant ist.
InformationsquelleAutor dbreaux
Ich hatte ein problem, wo log4j war, zeigten nicht alles, was in einem meiner Projekte. Stellte sich heraus, ich hatte Hinzugefügt, ein führender Platz in den classname in die log4j2.xml Datei. Log4j hat ein Wörterbuch-lookup durch classname. Also keine führenden oder nachgestellten Leerzeichen in der classname machen würde, dass insbesondere der Eintrag ungültig.
InformationsquelleAutor developer747
nicht in der Lage, um die Protokolldatei zu erstellen, die ich verwendet habe logback.xml Datei im Frühling webservice-Anwendung und der Implementierung auf dem websphere-server...Aber wenn ich es benutzt log4j.properties-Datei erstellt log-Datei . ich habe die richtige Abhängigkeit richtigen für log4j und slf4j.. logback.xml Datei
`
Abhängigkeit:
InformationsquelleAutor lilhore