Lesen der log4j-Einstellungsdatei in einem Java-Projekt, das in der JAR-Datei Memo zusammengestellt ist

Überblick

Als ich ein Programm zusammenstellte, das Protokolle mit log4j in eine JAR-Datei ausgibt, wurde log4j.xml, die log4j-Einstellungsdatei, nicht richtig geladen.

Die Struktur des Projekts sieht so aus.

├ src
  └ foo 
     └ foo.java <=Hauptprogramm
└ resources
  └ log4j.xml <=log4j Konfigurationsdatei

Fehlerbeispiel

Im Konstruktor des Hauptprogramms habe ich die Konfigurationsdatei wie folgt gelesen.

foo.java


import org.apache.log4j.xml.DOMConfigurator;

public class foo {
    public foo () {
        DOMConfigurator.configure("log4j.xml");
    }
}

Wenn Sie den Dateinamen "log4j.xml" angeben, wird er beim Testen unter Eclipse erfolgreich gelesen. Wenn dieses Projekt jedoch in eine JAR-Datei konvertiert und ausgeführt wird, schlägt der Fehler fehl, dass die Datei nicht gefunden werden kann.

Fehlerursache

Als ich ein Projekt in eine JAR-Datei verwandelte und es von einem anderen Programm aus aufrief, suchte es im Startverzeichnis dieses Programms nach der Datei "log4j.xml", sodass es anscheinend nicht erfolgreich gefunden werden konnte.

Geben Sie daher anstelle des Dateinamens den absoluten Pfad zur Datei an.

Lösung

Wenn Sie den Konstruktor wie folgt umschreiben, können Sie den absoluten Pfad angeben. Selbst wenn Sie das Projekt in einer JAR-Datei zusammenstellen, wird die Einstellungsdatei gut gelesen.

foo.java


	public foo () {
		ClassLoader loader = Thread.currentThread().getContextClassLoader();
		DOMConfigurator.configure(loader.getResource("log4j.xml"));
	}

Recommended Posts

Lesen der log4j-Einstellungsdatei in einem Java-Projekt, das in der JAR-Datei Memo zusammengestellt ist
So lesen Sie Ihre eigene YAML-Datei (*****. Yml) in Java
So fügen Sie eine JAR-Datei in ScalaIDE hinzu
So erstellen Sie ein neues Gradle + Java + Jar-Projekt in Intellij 2016.03
So konvertieren Sie eine Datei in ein Byte-Array in Java
So debuggen Sie die generierte JAR-Datei mit Eclipse
Anmerkung: [Java] Überprüfen der in pom.xml beschriebenen groupId usw.
Lesen Sie die Java-Eigenschaftendatei in C #
Wie man JAVA in 7 Tagen lernt
Protokollausgabe in Datei in Java
Wie verwende ich Klassen in Java?
So benennen Sie Variablen in Java
So verketten Sie Zeichenfolgen mit Java
So erstellen Sie eine JAR-Datei ohne Abhängigkeiten in Maven
So ermitteln Sie die Länge einer Audiodatei mit Java
So implementieren Sie die Datumsberechnung in Java
So implementieren Sie den Kalman-Filter mit Java
Mehrsprachige Unterstützung für Java Verwendung des Gebietsschemas
Versuchen Sie, Project Euler in Java zu lösen
[Java] Verwendung der File-Klasse
So führen Sie eine Basiskonvertierung in Java durch
So erzwingen Sie Codierungskonventionen in Java
Einbetten von Janus Graph in Java
Lesen Sie die xlsx-Datei in Java mit Selenium
So erhalten Sie das Datum mit Java
Beispiel zum Entpacken einer gz-Datei in Java
Lesen Sie eine Zeichenfolge in einer PDF-Datei mit Java
So zeigen Sie eine Webseite in Java an
So verbergen Sie Nullfelder als Antwort in Java
So komprimieren Sie eine JAVA-CSV-Datei und verwalten sie in einem Byte-Array
[Java] Dateien in src / main / resources lesen
So binden Sie mit einer Eigenschaftendatei in Spring Boot
So lösen Sie Ausdrucksprobleme in Java
[Java] Memo zum Schreiben der Quelle
So erstellen Sie ein ausführbares JAR in Maven
Wie schreibe ich Java String # getBytes in Kotlin?
Speichern von Dateien mit der angegebenen Erweiterung unter dem in Java angegebenen Verzeichnis in der Liste
[Java] [Maven] Vorlage von pom.xml zum Registrieren der JAR-Datei eines Drittanbieters im lokalen Repository
Aufrufen von Funktionen in großen Mengen mit Java Reflection
So erstellen Sie eine Java-Umgebung in nur 3 Sekunden
[Java] So lassen Sie den privaten Konstruktor in Lombok weg
So springen Sie von Eclipse Java zu einer SQL-Datei
Wie kann ich IBM Mainframe-Dateien in Java eingeben / ausgeben?
So erstellen Sie ein Spring Boot-Projekt in IntelliJ
Lesen von Java Memory Management und GC Viewer
So erstellen Sie einen Daten-URI (base64) in Java
Fügen Sie eine externe JAR-Datei in ein IntelliJ-Projekt ein.
[Java] Holen Sie sich die Datei unabhängig von der Umgebung in das JAR
So testen Sie den Bildschirm zum Hochladen von Dateien mit Spring + Selenium
So konvertieren Sie A in a und a in A mit logischem Produkt und Summe in Java
So verwalten Sie Java EE-Projekte in Eclipse
Zusammenfassung der Implementierung von Standardargumenten in Java
Wie man altes Java (8er) in macOS 10.15 Catalina einfügt
Hinweise zur Verwendung regulärer Ausdrücke in Java
Lesen Sie JSON in Java
Java-Eigenschaftendatei lesen
So laden Sie eine Bibliothek aus einer JAR-Datei mit VSCode << So verwenden Sie Maven / Gradle nicht >>
So erhalten Sie den Namen einer Klasse / Methode, die in Java ausgeführt wird