webentwicklung-frage-antwort-db.com.de

Externe log4j.xml-Datei

Ich versuche, ein jar mit der Datei log4j.xml im Dateisystem außerhalb des jar auszuführen:

Java -jar MyJarName.jar -cp=/opt/companyName/pathToJar/ log4j.configuration=log4j.xml argToJar1 argToJar2

Ich habe auch versucht:

Java -jar MyJarName.jar -cp=/opt/companyName/pathToJar/ log4j.configuration=/opt/companyName/pathToJar/log4j.xml argToJar1 argToJar2

Die Datei log4j.xml befindet sich im selben Verzeichnis wie die JAR-Datei (/ opt/companyName/pathToJar /). Ich erhalte jedoch immer noch die Standardwarnmeldung:

log4j:WARN No appenders could be found for logger (org.Apache.axis.i18n.ProjectResourceBundle).
log4j:WARN Please initialize the log4j system properly.

Ist es möglich, die Konfigurationsdatei außerhalb der Dose zu haben, oder muss ich sie mit der Dose packen? 

TIA

37
javamonkey79

Wenn Sie die -jar-Option zum Starten einer ausführbaren JAR-Datei verwenden, wird der Klassenpfad aus dem Manifest der JAR-Datei abgerufen. Der -cp-Schalter wird, falls angegeben, ignoriert.

Jeff Storeys Antwort wird die einfachste Lösung sein. Alternativ können Sie ein Class-Path-Attribut zu manifest der JAR-Datei hinzufügen.

EDIT Aktivieren Sie das Debuggen von log4j und geben Sie den Pfad zu log4j.xml als vollständig qualifizierte URL an. Zum Beispiel:

Java -Dlog4j.debug -Dlog4j.configuration=file:/path/to/log4j.xml -jar ...
49
Jason Day

das funktioniert:

Java -jar -Dlog4j.configuration="file:d:\log4j.xml" myjar.jar
15
tibi

Verwenden Sie für log4j2 die Option configurationFile:

Java -Dlog4j.configurationFile=/path/to/log4j2.xml -jar ...

http://logging.Apache.org/log4j/2.0/manual/configuration.html

12
r00tGER

Haben Sie Java -Dlog4j.configuration=/path/to/log4j.xml -jar <rest-of-args> ausprobiert

8
Jeff Storey

sie können eine Standardeigenschaftendatei im jar definieren. Wenn keine benutzerdefinierten Eigenschaften definiert sind, können Sie diese Standarddatei verwenden. Wenn eine benutzerdefinierte Eigenschaft definiert ist, können Sie die Standardeigenschaft überschreiben. 

die Datei myjar.jar enthält die Datei log4j.default.configuration

sie können Ihr Programm mit diesen Parametern ausführen, um Ihre Anwendung zu starten

Java  -jar -Dlog4j.configuration=log4j.properties  target\yourfile-v01_000_01_c002.jar

Beispielcode

public static void main(String[] args) {
    String filename = System.getProperty("log4j.configuration");
    if(null==filename||filename.trim().equals("")) {
        logger.info("Using default log4j configuration log4j.default.properties.");
        logger.info("If you would like to change the default configuration please add following param before startup -Dlog4j.configuration=<log4jfile>");
        PropertyConfigurator.configure( Main.class.getResourceAsStream("/log4j.default.properties"));
    } else {
        File file = new File(filename);
        if(!file.exists()) System.out.println("It is not possible to load the given log4j properties file :"+file.getAbsolutePath());
        else PropertyConfigurator.configure(file.getAbsolutePath());

    }
}
6
Koray Güclü

Ich hatte Probleme bei der Verwendung von log4j mit Suns JDK und der automatischen Konfiguration.

Sie können dies verwenden:

String filename = System.getProperty("log4j.configuration");
DOMConfigurator(filename);

bevor Sie Logger verwenden.

1
VlatkoB

Java -cp "path/to/your/log4jxml: path/to/yourjar.jar" your.package.MainClass

Die log4j.xml-Datei im Verzeichnis "Pfad/zu/Ihre/log4jxml" überschreibt die Datei "log4j.xml" in "Pfad/zu/Ihre/Ihre.jar.jar".

Weitere Informationen finden Sie unter Mehrere Gläser in Java-Klassenpfad setzen .

0
Dayong

Die einfachste Pfadkonfiguration für "log4j2is using thestatic blocksettinglog4j.configurationFile":

public class MyClass {

    static {
        System.setProperty("log4j.configurationFile", "./config/log4j2.xml");
    }

    protected final transient Logger logger =  LogManager.getLogger(IDOLTracker.class);

    public static void main(String[] args) {
         logger.info("");
    }
}

Dann könnte die Struktur sein:

Programmordner
| ---- /config/log4j2.xml
| ---- MyClass.jar

Wenn Sie Ihr jar ausführen, sucht es außerhalb der jar nach der XML-Datei.

0
another

"-jar" verwendet nur den Klassenpfad innerhalb der ausführbaren jar und -cp wird ignoriert. Hinzufügen von "." Zum Klassenpfad im ausführbaren jar sollte log4j.xml fount sein.