web-dev-qa-db-fra.com

Fichier log4j.xml externe

J'essaie d'exécuter un fichier jar avec le fichier log4j.xml sur le système de fichiers en dehors du fichier jar comme suit:

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

J'ai aussi essayé:

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

Le fichier log4j.xml est dans le même répertoire que le fichier jar (/ opt/companyName/pathToJar /), mais je reçois toujours le message d'avertissement standard:

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

Est-il possible d'avoir le fichier de configuration en dehors du fichier jar ou dois-je le conditionner avec le fichier jar? 

TIA

37
javamonkey79

Lorsque vous utilisez le commutateur -jar pour lancer un fichier jar exécutable, le chemin d'accès aux classes est obtenu à partir du manifeste du fichier jar. Le commutateur -cp, s'il est spécifié, est ignoré.

La réponse de Jeff Storey va être la solution la plus simple. Vous pouvez également ajouter un attribut Class-Path au manifeste du fichier jar.

EDIT Essayez d'activer le débogage de log4j et de transformer le chemin d'accès à log4j.xml en une adresse URL complète. Par exemple:

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

cela marche:

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

Pour log4j2, utilisez l’option configurationFile:

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

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

12
r00tGER

Avez-vous essayé Java -Dlog4j.configuration=/path/to/log4j.xml -jar <rest-of-args>

8
Jeff Storey

vous pouvez définir un fichier de propriétés par défaut dans le fichier jar. Si aucune propriété personnalisée n'est définie, vous pouvez utiliser ce fichier par défaut. Si une propriété personnalisée est définie, vous pouvez remplacer la propriété par défaut. 

le fichier myjar.jar contient log4j.default.configuration

vous pouvez exécuter votre programme avec ces paramètres pour démarrer votre application

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

Exemple de code

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ü

J'ai eu des problèmes d'utilisation de log4j avec le JDK et de la configuration automatique de Sun.

Vous pouvez utiliser ceci:

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

avant d’utiliser Logger.

1
VlatkoB

Java -cp "chemin/vers/votre/log4jxml: chemin/vers/votre/jjar.jar" votre.package.MainClass

Le fichier log4j.xml du répertoire "chemin/vers/votre/log4jxml" remplacera le fichier log4j.xml dans "chemin/vers/votre/jjar.jar".

Veuillez vous référer à Définition de plusieurs fichiers JAR dans le chemin de classe Java .

0
Dayong

La configuration de chemin la plus simple pour `` 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("");
    }
}

Ensuite, la structure pourrait être comme:

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

Lorsque vous exécutez votre fichier jar, le fichier XML se trouve à l’extérieur du fichier.

0
another

"-jar" utilise uniquement le chemin de classe à l'intérieur du fichier jar exécutable, et -cp est ignoré. Ajouter "." Le chemin d'accès aux classes dans l'exécutable jar doit permettre à log4j.xml d'être décomposé.