2010-11-23 35 views
13

Meine Java-Anwendung verweist auf eine JAR-Datei eines Drittanbieters, die log4j-Protokollierung verwendet. Das Problem ist, dass dieses jar eine eigene Datei log4j.properties enthält, die auf meinem Rechner Ausnahmen mit Zugriffsverweigerung verursacht, aber ich habe keine Kontrolle über die JAR-Datei, um ihren Inhalt zu ändern.Log4j.properties überschreiben

Ich habe versucht, meine eigene log4j.properties-Datei im Klassenpfad meiner Anwendung hinzuzufügen, aber es scheint keinen Effekt zu haben. Wenn ich versuche, PropertyConfigurator zu verwenden, um meine eigenen Einstellungen programmgesteuert zu importieren, scheint log4j die Eigenschaftendatei der JAR-Datei zuerst zu laden (was eine Ausnahme verursacht).

Wie kann ich log4j kurzschließen, um die log4j.properties-Datei einer Drittanbieter-JAR-Datei zu ignorieren und meine eigene Datei zu verwenden?

Antwort

15

Es gibt verschiedene Art und Weise sind log4j.properties außer Kraft zu setzen, ist einer von ihnen:

  • Verwenden log4j.xml finden Sie in der Verlängerung

Ein weiterer Ansatz ist:

  • Setzen Sie die Systemeigenschaft log4j.defaultInitOverride auf einen anderen Wert dann "false" bewirkt, dass log4j die Standard-Initialisierungsprozedur (diese Prozedur) überspringt.
  • Legen Sie die Ressourcenzeichenfolgenvariable auf den Wert der Systemeigenschaft log4j.configuration fest. Die Standardinitialisierungsdatei wird am besten über die Systemeigenschaft log4j.configuration angegeben. Wenn die Systemeigenschaft log4j.configuration nicht definiert ist, setzen Sie die Variable der Zeichenfolgenressource auf den Standardwert "log4j.properties".
  • Es wurde versucht, die Ressourcenvariable in eine URL zu konvertieren.
  • Wenn die Ressourcenvariable beispielsweise aufgrund einer MalformedURLException nicht in eine URL konvertiert werden kann, suchen Sie nach der Ressource aus dem Klassenpfad, indem Sie org.apache.log4j.helpers.Loader.getResource (resource, Logger.class) aufrufen Gibt eine URL zurück. Beachten Sie, dass die Zeichenfolge "log4j.properties" eine fehlerhafte URL darstellt. Eine Liste der durchsuchten Speicherorte finden Sie unter Loader.getResource (java.lang.String).
  • Wenn keine URL gefunden wurde, brechen Sie die Standardinitialisierung ab. Andernfalls konfigurieren Sie log4j über die URL. Der PropertyConfigurator wird verwendet, um die URL zu analysieren, um log4j zu konfigurieren, wenn die URL nicht mit der Erweiterung ".xml" endet. In diesem Fall wird der DOMConfigurator verwendet. Sie können optional einen benutzerdefinierten Konfigurator angeben. Der Wert der Systemeigenschaft log4j.configuratorClass wird als vollständig qualifizierter Klassenname Ihres benutzerdefinierten Konfigurators verwendet. Der von Ihnen angegebene benutzerdefinierte Konfigurator muss die Configurator-Schnittstelle implementieren.

Ref: http://logging.apache.org/log4j/1.2/manual.html

+0

Die URL verweist auf das Ende des Lebens Version von Log4j. Die nächste Entsprechung ist: https://logging.apache.org/log4j/2.x/manual/configuration.html#SystemProperties –

Verwandte Themen