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
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.
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.
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