it-swarm.it

Cambia posizione di log4j.properties

Voglio mettere tutti i miei file di configurazione in una sottocartella /config della mia directory applicativa. Log4j si aspetta il file log4j.properties nella cartella principale della mia applicazione. C'è un modo per dire a log4j dove cercare il file delle proprietà? 

47
markus

Sì, definire la proprietà log4j.configuration

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

Nota che il valore della proprietà deve essere un URL.

Per ulteriori informazioni, consultare la sezione "Procedura di inizializzazione predefinita" in Manuale Log4j .

61

È possibile utilizzare PropertyConfigurator per caricare log4j.properties ovunque si trovi sul disco.

Esempio:

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

}

Se si dispone di una configurazione XML Log4J, utilizzare invece DOMConfigurator .

32
Buhake Sindi

Utilizzare PropertyConfigurator: PropertyConfigurator.configure (configFileUrl);

4
Suraj Chandran

Fare riferimento a questo esempio tratto da - 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");
    }
}

Per modificare i livelli del logger - Logger.getRootLogger().setLevel(Level.INFO);

2
Borat Sagdiyev

Questa è la mia classe: Path va bene e le proprietà vengono caricate.

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

Devi usare la proprietà log4j.configuration in questo modo:

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

Se il file si trova sotto il percorso di classe (nella cartella ./src/main/resources/), puoi omettere il protocollo file://:

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

In Eclipse puoi impostare un argomento VM su:

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