web-dev-qa-db-fra.com

Définir le niveau de journalisation log4j

Je travaille actuellement sur un projet qui utilise log4j. Je suis en train d’exécuter un testcase (junit) et je voudrais définir le niveau de journalisation à suivre afin que je puisse voir si toutes les valeurs sont correctes. Les classes qui utilisent la journalisation dans le projet contiennent une ligne comme celle-ci:

private static final Log LOG = LogFactory.getLog(MatchTaskTest.class);

et utiliser un comme comme ça pour faire le débogage réel

LOG.trace("value");

Je n'ai jamais utilisé log4j auparavant. Quelqu'un sait-il que je peux modifier le niveau de journalisation uniquement pour le test, de préférence simplement en définissant un paramètre dans la boîte de dialogue de configuration d'exécution d'Eclipse.

22
Konstantin Weitz

Utiliser un autre fichier de configuration

Peut-être pourriez-vous indiquer un autre fichier de configuration.

Java -Dlog4j.configuration=config file yourApp

Où:

  • config, votre fichier de configuration, par exemple log4j.properties ou log4j.xml.
  • file, le fichier journal, par exemple myApp.log
  • yourApp, votre application, par exemple MyAppGUI

Ou vous pouvez utiliser un cours

Java -Dlog4j.configurationClass=config class yourApp

Où:

  • config, votre fichier de configuration, par exemple log4j.properties ou log4j.xml.
  • class, toute classe d’initialisation personnalisée, telle que LogManager, doit implémenter le org.Apache.log4j.spi.Configurator
  • yourApp, votre application, par exemple MyAppGUI

Vous pouvez en voir plus dans la section Apache log4j 1.2 - Brève introduction à log4j on Procédure d'initialisation par défaut.

Modification du niveau par programme

De plus, vous pouvez également utiliser les méthodes offrant la classe Logger , comme public void setLevel(Level level) , par exemple:

Logger.getRootLogger().setLevel(Level.TRACE);

Puisque vous ne voulez que des tests, vous pouvez les utiliser. Mais il est recommandé de ne pas utiliser dans le code client car ils écrasent les paramètres de configuration par défaut en code dur. Le meilleur moyen consiste à utiliser un fichier de configuration externe.

18
Paul Vargas

Dans votre classe de junit, mettez:

Logger.getRootLogger().setLevel(Level.TRACE);

quelque part avant l'exécution de la méthode testée. Il définira le niveau de seuil du logger racine sur TRACE.

20
daniel

Si vous utilisez Maven, vous pouvez avoir deux fichiers de configuration log4j:

  • un dans src/main/resources, contenant votre configuration de journalisation de production
  • un dans src/test/resources, contenant votre configuration de journalisation au moment du test

Maven utilisera automatiquement ce dernier au moment du test et l'intégrera dans votre artefact (JAR, WAR, etc.) afin qu'il soit utilisé en production. Vous n'avez pas à vous soucier des commutateurs de ligne de commande ou quoi que ce soit.

2
Andrew Swan

Je ne pense pas que ce soit possible.

Le fichier de configuration va vous permettre de configurer les messages de journal apparaissant réellement dans le journal, et non le niveau auquel chaque message sera consigné. Cela a du sens - la configuration ne devrait pas affecter le niveau du message.

Le javadoc a une méthode pour chaque niveau de journalisation et une méthode de journalisation générique, qui prend une priorité. Je ne suis donc pas sûr qu'il y ait même une valeur par défaut à définir.

Vous pouvez définir un fichier de configuration de manière explicite sur la ligne de commande via -Dlog4j.configuration=<FILE_PATH>, de sorte que vous puissiez configurer une configuration spécifique pour ce scénario de test.

0
dfb

Je ne sais pas pourquoi certaines de ces solutions n'ont pas fonctionné pour moi. (Je ne veux pas écrire de fichier de configuration). ce qui suit fonctionne pour moi

Logger log1 = Deencapsulation.getField(Some.class,"logger");
log1.setLevel(Level.DEBUG);
0
zinking