web-dev-qa-db-fra.com

Comment définir le fichier de propriétés log4j?

J'ai un projet Java Eclipse qui utilise log4j. Je ne peux pas définir l'accès au fichier de configuration log4j par chemin d'accès. Je dois exporter et exécuter le projet dans un bocal.

Voici comment j'essaye:

public class Wita {
  static Logger logger;
  public static void main(String[] args) {
    System.setProperty("log4j.configuration", new File("").getCanonicalPath()+File.separatorChar+"resources"+File.separatorChar+"log4j.xml" );
    // System.out.println( System.getProperty("log4j.configuration") );
    logger = Logger.getLogger(Wita.class.getName());
  }
}

La sortie système affiche le répertoire C:\Utilisateurs\roncsak\Eclipse_workspace\WITA\resources\log4j.xml , ce qui est correct. WITA est le dossier de base du projet. Mais si vous exécutez le projet avec l'argument -Dlog4j.debug, les éléments suivants sont également renvoyés:

 log4j: Recherche de [C:\Utilisateurs\roncsak\Eclipse_workspace\WITA\ressources\log4j.xml] à l'aide du chargeur de classes de contexte Sun.misc.Launcher$AppClassLoader@18e3e60 .
 log4j: Recherche du [C:\Users\roncsak\Eclipse_workspace\WITA\resources\log4j.xml] à l'aide de Sun.misc.Launcher$AppClassLoader@18e3e60 class loader .
 Log4j: Recherche de [C:\Utilisateurs\roncsak\Eclipse_workspace\WITA\resources \.] log4j.xml] en utilisant ClassLoader.getSystemResource () .
 log4j: Impossible de trouver la ressource: [C:\Utilisateurs\roncsak\Eclipse_workspace\WITA\resources\log4j.xml] .

Je voudrais changer le log4j.xml au fil du temps, sans construire un autre fichier JAR. Comment puis je faire ça?

12
roncsak

De "Procédure d'initialisation par défaut" à http://logging.Apache.org/log4j/1.2/manual.html :

  • Définissez la variable de chaîne de ressource sur la valeur de Propriété système log4j.configuration. La manière préférée de spécifier le Le fichier d’initialisation par défaut se trouve dans le système log4j.configuration propriété. Dans le cas où la propriété système log4j.configuration n'est pas défini, puis définissez la ressource de variable chaîne sur sa valeur par défaut "log4j.properties". 
  • Essayez de convertir la variable de ressource en URL.
  • Si la variable de ressource ne peut pas être convertie en une URL, par exemple, à cause de à une exception MalformedURLE, puis recherchez la ressource dans le fichier classpath en appelant org.Apache.log4j.helpers.Loader.getResource (resource, Logger.class) qui retourne une URL. Notez que la chaîne "log4j.properties" constitue une URL mal formée. Voir Loader.getResource (Java.lang.String) pour la liste des lieux recherchés.

Vous devez donc ajouter le code file: à la valeur log4j.configuration afin de pouvoir le traiter comme une URL.

Voir https://stackoverflow.com/a/7927278/603516 .

Encore meilleur code:

    System.setProperty("log4j.configuration", new File("resources", "log4j.xml").toURL());
20
Vadzim

Vous pouvez définir l'argument VM: -Dlog4j.configuration='path_to_log4j.xml'

ou par programme: 

String logFilePath = new File(<path_to_log4j.xml>);
if (logFilePath == null || "".equalsIgnoreCase(logFilePath)) {
    URL file = this.getClass().getResource(DEFAULT_CONF);
    DOMConfigurator.configure(file);
} else {
    DOMConfigurator.configure(<default_config_file>);   
}
6
yodamad

Toutes ces réponses ci-dessus ne satisfont pas alors je poste ici pour quelqu'un qui pourrait en avoir besoin à l'avenir:

  1. Vous devez spécifier où se trouve votre propriété. Soit par programme ou option de commande est très bien.

Par programme:

private static void setupLog4J(){
    try {
        System.setProperty("log4j.configuration", new File(".", File.separatorChar+"log4j.properties").toURL().toString());
    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
  1. Créez votre propre fichier log4j.properties:

#  Logging level
# Root logger option
log4j.rootLogger=DEBUG, stdout, file

# Redirect log messages to console
log4j.appender.stdout=org.Apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.Apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p     %c{1}:%L - %m%n

# Redirect log messages to a log file, support file rolling.
log4j.appender.file=org.Apache.log4j.RollingFileAppender
log4j.appender.file.File=c:/project/resources/t-output/log4j-application.log
log4j.appender.file.MaxFileSize=5MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.Apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

J'espère que cela t'aides.

0
sonvx