Ich bin daran interessiert, die Protokollstufe in Log4j2 programmgesteuert zu ändern. Ich habe versucht, die Konfigurationsdokumentation zu lesen, aber das schien nichts zu haben. Ich habe auch versucht, in das Paket zu schauen:, org.apache.logging.log4j.core.config
aber nichts dort sah auch hilfreich aus.
108
Antworten:
BEARBEITET gemäß log4j2 Version 2.4 FAQ
Sie können die Ebene eines Loggers mit der Klasse Configurator von Log4j Core festlegen. ABER beachten Sie, dass die Configurator-Klasse nicht Teil der öffentlichen API ist.
Quelle
BEARBEITET, um Änderungen in der in Log4j2 Version 2.0.2 eingeführten API widerzuspiegeln
Wenn Sie die Root-Logger-Ebene ändern möchten, gehen Sie wie folgt vor:
Hier ist das Javadoc für LoggerConfig.
quelle
Die akzeptierte Antwort von @slaadvak hat bei Log4j2 2.8.2 bei mir nicht funktioniert . Das Folgende tat es.
So ändern Sie das Protokoll
Level
allgemein :Level
Verwenden Sie Folgendes, um das Protokoll nur für die aktuelle Klasse zu ändern :quelle
Wenn Sie eine einzelne bestimmte Logger-Ebene ändern möchten (nicht den Root-Logger oder die in der Konfigurationsdatei konfigurierten Logger), können Sie Folgendes tun:
quelle
setLevel(logger, Level.ERROR);
und logger.debug Anweisungen noch gedruckt. Meine log4j2.xml-Datei befindet sich unter pastebin.com/fcbV2mTWIch habe hier eine gute Antwort gefunden: https://garygregory.wordpress.com/2016/01/11/changing-log-levels-in-log4j2/
Mit org.apache.logging.log4j.core.config.Configurator können Sie die Ebene für einen bestimmten Logger festlegen.
quelle
Der programmatische Ansatz ist eher aufdringlich. Vielleicht sollten Sie die JMX-Unterstützung von Log4J2 überprüfen:
Aktivieren Sie den JMX-Port in Ihrem Anwendungsstart:
-Dcom.sun.management.jmxremote.port = [port_num]
Verwenden Sie einen der verfügbaren JMX-Clients (die JVM stellt einen in JAVA_HOME / bin / jconsole.exe bereit), während Sie Ihre Anwendung ausführen.
Suchen Sie in JConsole nach der Bean "org.apache.logging.log4j2.Loggers"
Ändern Sie schließlich die Ebene Ihres Loggers
Das, was mir am besten gefällt, ist, dass Sie Ihren Code oder Ihre Konfiguration nicht ändern müssen, um dies zu verwalten. Es ist alles extern und transparent.
Weitere Informationen: http://logging.apache.org/log4j/2.x/manual/jmx.html
quelle
Die meisten Antworten gehen standardmäßig davon aus, dass die Protokollierung additiv sein muss. Angenommen, ein Paket generiert viele Protokolle, und Sie möchten die Protokollierung nur für diesen bestimmten Protokollierer deaktivieren. Hier ist der Code, mit dem ich ihn zum Laufen gebracht habe
Ein Testfall dafür
Angenommen, die folgende log4j2.xml befindet sich im Klassenpfad
quelle
Eine ungewöhnliche Methode, die ich gefunden habe, besteht darin, zwei separate Dateien mit unterschiedlichen Protokollierungsstufen zu erstellen.
Beispielsweise. log4j2.xml und log4j-debug.xml Ändern Sie nun die Konfiguration aus diesen Dateien.
Beispielcode:
quelle