2 votes

Les valeurs de recherche Log4J 2 sont utilisées dans la configuration avant qu'elles ne soient chargées/présentes.

Je suis en train d'utiliser la recherche SystemPropertiesLookup pour configurer ma configuration Log4J2. Les propriétés système sont définies comme première ligne dans ma méthode principale. Le problème est que lorsque Log4J charge la configuration, la méthode principale n'est pas encore appelée, et donc, les propriétés systèmes ne sont pas encore remplies.

Voici mon log4j2.xml:

Le fichier sera appelé app-UNKNOWN-UNKNOWN car lorsque Log4J le remplit, les propriétés ne sont pas encore disponibles.

Y a-t-il un moyen de faire attendre Log4J, de préférence sans déplacer la configuration vers le code Java?

Les propriétés doivent être définies pendant l'exécution (première ligne de la méthode principale).

Une solution possible pourrait être d'appeler uniquement getLogger(..) APRÈS cette méthode, au lieu de l'initialiser avec la variable, mais cela ne correspond pas vraiment à ma tâche.

4voto

D.B. Points 2467

Vous pouvez faire ce que vous voulez en utilisant le RoutingAppender. Voici un exemple de code :

package example;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class SomeClass {

    private static final Logger log = LogManager.getLogger();

    public static void main(String[] args){
        System.setProperty("myProperty", "myFile.log");

        if(log.isDebugEnabled())
            log.debug("Ceci est un debug !");
        log.info("Voici quelques infos !");
        log.error("Une erreur s'est produite !");
    }
}

Voici le log4j2.xml :

En exécutant le code java ci-dessus, un fichier appelé myFile.log est créé dans un dossier logs dans le répertoire de travail actuel. Le contenu du fichier journal est quelque chose comme suit :

2018-05-21 22:13:29.147 [main] DEBUG example.SomeClass - Ceci est un debug !
2018-05-21 22:13:29.160 [main] INFO  example.SomeClass - Voici quelques infos !
2018-05-21 22:13:29.161 [main] ERROR example.SomeClass - Une erreur s'est produite !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X