web-dev-qa-db-fra.com

Changer l'emplacement de log4j.properties

Je veux mettre tous mes fichiers de configuration dans un sous-dossier /config de mon répertoire d'application. Log4j attend le fichier log4j.properties dans le dossier racine de mon application. Existe-t-il un moyen de dire à log4j où chercher le fichier de propriétés? 

47
markus

Oui, définir la propriété log4j.configuration

Java -Dlog4j.configuration=file:/path/to/log4j.properties myApp

Notez que cette valeur de propriété doit être une URL.

Pour plus d'informations, consultez la section 'Procédure d'initialisation par défaut' dans Manuel Log4j .

61

Vous pouvez utiliser PropertyConfigurator pour charger votre log4j.properties où qu'il se trouve sur le disque.

Exemple:

Logger logger = Logger.getLogger(this.getClass());
String log4JPropertyFile = "C:/this/is/my/config/path/log4j.properties";
Properties p = new Properties();

try {
    p.load(new FileInputStream(log4JPropertyFile));
    PropertyConfigurator.configure(p);
    logger.info("Wow! I'm configured!");
} catch (IOException e) {
    //DAMN! I'm not....

}

Si vous avez une configuration XML Log4J, utilisez plutôt DOMConfigurator .

32
Buhake Sindi

Utilisez le PropertyConfigurator: PropertyConfigurator.configure (configFileUrl);

4
Suraj Chandran

Reportez-vous à cet exemple tiré de - http://www.dzone.com/tutorials/Java/log4j/sample-log4j-properties-file-configuration-1.html

import org.Apache.log4j.Logger;
import org.Apache.log4j.PropertyConfigurator;

public class HelloWorld {

    static final Logger logger = Logger.getLogger(HelloWorld.class);
    static final String path = "src/resources/log4j.properties";

    public static void main(String[] args) {

        PropertyConfigurator.configure(path);
        logger.debug("Sample debug message");
        logger.info("Sample info message");
        logger.warn("Sample warn message");
        logger.error("Sample error message");
        logger.fatal("Sample fatal message");
    }
}

Pour modifier les niveaux de l’enregistreur - Logger.getRootLogger().setLevel(Level.INFO);

2
Borat Sagdiyev

Ceci est ma classe: Path est correct et les propriétés sont chargées.

package com.fiserv.dl.idp.logging;

import Java.io.File;
import Java.io.FileInputStream;
import Java.util.MissingResourceException;
import Java.util.Properties;

import org.Apache.log4j.Logger;
import org.Apache.log4j.PropertyConfigurator;

public class LoggingCapsule {

    private static Logger logger = Logger.getLogger(LoggingCapsule.class);

    public static void info(String message) {


        try {

            String configDir = System.getProperty("config.path");
            if (configDir == null) {
                throw new MissingResourceException("System property: config.path not set", "", "");
            }
            Properties properties = new Properties();
            properties.load(new FileInputStream(configDir + File.separator + "log4j" + ".properties"));
            PropertyConfigurator.configure(properties);
        } catch (Exception e) {
            e.printStackTrace();

        }
        logger.info(message);
    }
    public static void error(String message){
        System.out.println(message);
    }

}
0
pankaj

Vous devez utiliser la propriété log4j.configuration comme ceci:

Java -Dlog4j.configuration=file:/path/to/log4j.properties myApp

Si le fichier se trouve sous le chemin de classe (dans le dossier ./src/main/resources/), vous pouvez omettre le protocole file://:

Java -Dlog4j.configuration=path/to/log4j.properties myApp
0
Thomas Decaux

Dans Eclipse, vous pouvez définir un argument VM sur:

-Dlog4j.configuration=file:///${workspace_loc:/MyProject/log4j-full-debug.properties}
0
Sven Jörns