webentwicklung-frage-antwort-db.com.de

Legen Sie den Log4j-Loglevel fest

Ich arbeite gerade an einem Projekt, das log4j verwendet. Ich führe einen Testfall (junit) aus und möchte den Protokollierungsgrad auf Ablaufverfolgung setzen, damit ich sehen kann, ob alle Werte korrekt sind. Klassen, die die Protokollierung im Projekt verwenden, enthalten eine Zeile wie die folgende:

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

und verwenden Sie einen ähnlichen Befehl, um das Debugging durchzuführen

LOG.trace("value");

Ich habe noch nie log4j verwendet. Weiß jemand, wie ich die Protokollebene nur für den Testfall ändern kann, am besten einfach durch Definieren eines Parameters im Laufkonfigurationsdialog von Eclipse.

22

Verwenden einer anderen Konfigurationsdatei

Vielleicht könnten Sie auf eine andere Konfigurationsdatei verweisen.

Java -Dlog4j.configuration=config file yourApp

Woher:

  • config, Ihre Konfigurationsdatei, z. log4j.properties oder log4j.xml.
  • file, die Protokolldatei, z. myApp.log
  • yourApp, Sie app, z. MyAppGUI

Oder Sie können eine Klasse verwenden

Java -Dlog4j.configurationClass=config class yourApp

Woher:

  • config, Ihre Konfigurationsdatei, z. log4j.properties oder log4j.xml.
  • class, jede angepasste Initialisierungsklasse wie LogManager sollte den org.Apache.log4j.spi.Configurator implementieren.
  • yourApp, Sie app, z. MyAppGUI

Weitere Informationen finden Sie in Apache log4j 1.2 - Kurze Einführung in log4j on Default Initialization Procedure.

Die Ebene programmgesteuert ändern

Darüber hinaus können Sie auch die Methoden verwenden, die die Logger class anbieten, wie public void setLevel(Level level) , z.

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

Da Sie nur zu Testzwecken möchten, können Sie sie verwenden. Es wird jedoch empfohlen, nicht in Clientcode zu verwenden, da sie die Standard-Konfigurationsparameter hartcodiert überschreiben. Am besten verwenden Sie eine externe Konfigurationsdatei.

18
Paul Vargas

In Ihrer Juni-Klasse setzen Sie:

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

irgendwo vor der Ausführung der getesteten Methode. Der Schwellenwert des Root-Loggers wird auf TRACE gesetzt.

20
daniel

Wenn Sie Maven verwenden, können Sie zwei log4j-Konfigurationsdateien haben:

  • eine in src/main/resources, die Ihre Produktionsprotokollierungskonfiguration enthält
  • eine in src/test/resources, die die Konfiguration für die Testzeitprotokollierung enthält

Maven verwendet das letztere automatisch zur Testzeit und bündelt es in Ihrem Artefakt (JAR, WAR usw.), so dass es in der Produktion verwendet wird. Sie müssen sich nicht mit Befehlszeilenschaltern oder irgendetwas herumschlagen.

2
Andrew Swan

Ich denke nicht, dass das möglich ist.

In der Konfigurationsdatei können Sie konfigurieren, welche Protokollnachrichten tatsächlich im Protokoll angezeigt werden, und nicht auf welcher Ebene jede Nachricht protokolliert wird. Das macht Sinn - die Konfiguration sollte die Ebene der Nachricht nicht beeinflussen.

Das javadoc hat eine Methode für jede Protokollebene und eine generische Protokollmethode, die eine Priorität einnimmt, daher bin ich nicht sicher, ob überhaupt ein Standard festgelegt werden muss.

Sie können eine Konfigurationsdatei explizit in der Befehlszeile über -Dlog4j.configuration=<FILE_PATH> festlegen, sodass Sie eine bestimmte Konfiguration für diesen Testfall einrichten können.

0
dfb

Ich habe keine Ahnung, warum einige der oben genannten Dinge für mich nicht funktionierten. (Ich möchte keine Konfigurationsdatei schreiben). folgende arbeiten für mich

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