Ich habe ein jar im Klassenpfad meines Servers, der die Datei log4j.properties im root des jars zur Protokollierung des Codes enthält. Wenn der Code im Jar ausgeführt wird, tritt die Protokollierung für den Code nicht auf. Bei der Analyse des Problems mit der Option java -Dlog4j.debug habe ich erfahren, dass log4j die Datei log4j.properties von axis-ant.jar lädt (das ist es auch) auf meinem Klassenpfad) und benutze es anstelle der Eigenschaftendatei meines Jars.
Als ich die axis-ant.jar nachträglich aus dem Klassenpfad entfernt habe, wurde meine Datei log4j.properties sofort ausgewählt und die Protokollierung für meinen Code erfolgte.
Kann jemand bitte erklären, warum meine log4j.properties-Datei nicht geladen wird, während axis-ant.jar vorhanden ist?
Überraschenderweise wird das selbe jar mit axis-ant.jar im classpath mit korrekter Protokollierung erfolgreich in einem anderen Server ausgeführt. Beide Server haben dieselbe java 5 Version installiert und dieselbe Version von log4j jar
Sie sollten sich das log4j Handbuch ansehen. Der Abschnitt "Standard-Initialisierungsverfahren" beschreibt, wie log4j versuchen wird, die Initialisierungsdatei zu finden, und erklärt Möglichkeiten, einer speziellen Konfiguration zu entsprechen (z. B. durch Setzen der Systemeigenschaft log4j.configuration
).
Wenn Sie keine spezielle Konfiguration vornehmen wollen, müssen Sie sicherstellen, dass Ihre Konfigurationsdatei die erste im Klassenpfad ist.
Die Eigenschaftendatei wird anhand der Reihenfolge, in der das jar im Klassenpfad von Ihrem Anwendungsserver gefunden wird, aus dem jar abgerufen. Jetzt gibt es keine Möglichkeit, das Jar eindeutig zu ermitteln, von dem die Eigenschaftendatei geladen werden soll.
Um dieses Problem zu umgehen, enthalten die meisten Projekte Ihre log4j.properties-Datei im Server-Klassenpfad selbst . Auf diese Weise ist diese Datei die erste Eigenschaftendatei, die geladen werden muss und diese ist diejenige, die Ihr Protokollierungscode erhält.
Möglicherweise weil axis-ant.jar im Klassenpfad das eigene Glas vorkommt. Ich nehme an, dass Sie Ihr Glas zuvor in Klassenpfad setzen, dann sollte axis-ant.jar helfen