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?
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 .
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 .
Utilisez le PropertyConfigurator: PropertyConfigurator.configure (configFileUrl);
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);
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);
}
}
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
Dans Eclipse, vous pouvez définir un argument VM sur:
-Dlog4j.configuration=file:///${workspace_loc:/MyProject/log4j-full-debug.properties}