Je suis intéressé par la modification par programme du niveau de journal dans Log4j2. J'ai essayé de regarder leur documentation de configuration mais cela ne semblait rien avoir. J'ai également essayé de regarder dans le paquet:, org.apache.logging.log4j.core.config
mais rien ne semblait utile non plus.
109
Réponses:
ÉDITÉ selon la FAQ de log4j2 version 2.4
Vous pouvez définir le niveau d'un enregistreur avec le configurateur de classe de Log4j Core. MAIS sachez que la classe Configurator ne fait pas partie de l'API publique.
La source
MODIFIÉ pour refléter les modifications de l'API introduites dans Log4j2 version 2.0.2
Si vous souhaitez modifier le niveau de journalisation racine, procédez comme suit:
Voici le javadoc pour LoggerConfig.
la source
La réponse acceptée par @slaadvak n'a pas fonctionné pour moi pour Log4j2 2.8.2 . Ce qui suit a fait.
Pour changer le journal de manière
Level
universelle, utilisez:Pour modifier le journal
Level
uniquement pour la classe actuelle, utilisez:la source
Si vous souhaitez modifier un seul niveau d'enregistreur spécifique (pas l'enregistreur racine ou les enregistreurs configurés dans le fichier de configuration), vous pouvez le faire:
la source
setLevel(logger, Level.ERROR);
et les déclarations logger.debug toujours imprimées. Mon fichier log4j2.xml est à pastebin.com/fcbV2mTWJ'ai trouvé une bonne réponse ici: https://garygregory.wordpress.com/2016/01/11/changing-log-levels-in-log4j2/
Vous pouvez utiliser org.apache.logging.log4j.core.config.Configurator pour définir le niveau d'un enregistreur spécifique.
la source
L'approche programmatique est plutôt intrusive. Vous devriez peut-être vérifier le support JMX fourni par Log4J2:
Activez le port JMX au démarrage de votre application:
-Dcom.sun.management.jmxremote.port = [numéro_port]
Utilisez l'un des clients JMX disponibles (la JVM en fournit un dans JAVA_HOME / bin / jconsole.exe) lors de l'exécution de votre application.
Dans JConsole, recherchez le bean "org.apache.logging.log4j2.Loggers"
Modifiez enfin le niveau de votre enregistreur
Ce que j'aime le plus, c'est que vous n'avez pas à modifier votre code ou votre configuration pour gérer cela. Tout est externe et transparent.
Plus d'infos: http://logging.apache.org/log4j/2.x/manual/jmx.html
la source
La plupart des réponses supposent par défaut que la journalisation doit être additive. Mais disons qu'un paquet génère beaucoup de journaux et que vous souhaitez désactiver la journalisation pour cet enregistreur particulier uniquement. Voici le code que j'ai utilisé pour le faire fonctionner
Un cas de test pour le même
En supposant que log4j2.xml suivant est dans le chemin de classe
la source
Une façon inhabituelle que j'ai trouvée de faire est de créer deux fichiers séparés avec un niveau de journalisation différent.
Par exemple. log4j2.xml et log4j-debug.xml Modifiez maintenant la configuration à partir de ces fichiers.
Exemple de code:
la source