Jestem zainteresowany programową zmianą poziomu logowania w Log4j2. Próbowałem przejrzeć ich dokumentację konfiguracyjną, ale wydawało się, że nic tam nie ma. Próbowałem też zajrzeć do paczki: org.apache.logging.log4j.core.config
ale tam też nic nie wyglądało na pomocne.
109
Odpowiedzi:
EDYTOWANE zgodnie z FAQ log4j2 w wersji 2.4
Możesz ustawić poziom loggera za pomocą klasy Configurator z Log4j Core. ALE należy pamiętać, że klasa Configurator nie jest częścią publicznego interfejsu API.
Źródło
ZMIENIONO, aby odzwierciedlić zmiany w API wprowadzone w Log4j2 w wersji 2.0.2
Jeśli chcesz zmienić poziom głównego programu rejestrującego, zrób coś takiego:
Oto javadoc dla LoggerConfig.
źródło
Zaakceptowana odpowiedź @slaadvak nie zadziałała dla mnie dla Log4j2 2.8.2 . Następujące zrobiły.
Aby zmienić dziennik
Level
powszechnie używać:Aby zmienić dziennik
Level
tylko dla bieżącej klasy, użyj:źródło
Jeśli chcesz zmienić konkretny poziom rejestratora (nie root lub loggery skonfigurowane w pliku konfiguracyjnym), możesz to zrobić:
źródło
setLevel(logger, Level.ERROR);
i nadal drukowano instrukcje logger.debug. Mój plik log4j2.xml znajduje się pod adresem pastebin.com/fcbV2mTWZnalazłem dobrą odpowiedź tutaj: https://garygregory.wordpress.com/2016/01/11/changing-log-levels-in-log4j2/
Możesz użyć org.apache.logging.log4j.core.config.Configurator, aby ustawić poziom dla określonego programu rejestrującego.
źródło
Podejście programowe jest raczej uciążliwe. Być może powinieneś sprawdzić obsługę JMX zapewnianą przez Log4J2:
Włącz port JMX podczas uruchamiania aplikacji:
-Dcom.sun.management.jmxremote.port = [nr_portu]
Użyj dowolnego z dostępnych klientów JMX (JVM zapewnia jednego w JAVA_HOME / bin / jconsole.exe) podczas wykonywania aplikacji.
W JConsole poszukaj komponentu bean „org.apache.logging.log4j2.Loggers”
Wreszcie zmień poziom swojego loggera
Najbardziej podoba mi się to, że nie musisz modyfikować swojego kodu ani konfiguracji, aby tym zarządzać. To wszystko jest zewnętrzne i przejrzyste.
Więcej informacji: http://logging.apache.org/log4j/2.x/manual/jmx.html
źródło
Większość odpowiedzi domyślnie zakłada, że rejestrowanie musi być addytywne. Ale powiedz, że jakiś pakiet generuje dużo logów i chcesz wyłączyć rejestrowanie tylko dla tego konkretnego rejestratora. Oto kod, którego użyłem, aby to działało
Przypadek testowy dla tego samego
Zakładając, że następujący plik log4j2.xml znajduje się w ścieżce klasy
źródło
Jednym z nietypowych sposobów jest utworzenie dwóch oddzielnych plików z różnymi poziomami rejestrowania.
Na przykład. log4j2.xml i log4j-debug.xml Teraz zmień konfigurację z tych plików.
Przykładowy kod:
źródło