Jeśli nie jest uruchomiony w aplikacji internetowej, jaki jest właściwy sposób na zamknięcie Log4j2? I tylko zobaczyć LogManager.shutdown noop()Jak prawidłowo zamknąć log4j2
Odpowiedz
Nie ma publicznego API dla tego, ale można użyć
((LifeCycle) LogManager.getContext()).stop();
Jeśli jesteś zainteresowany posiadaniem API publicznej na to, proszę głosować na lub dodać komentarz tutaj: https://issues.apache.org/jira/browse/LOG4J2-124
Aktualizacja:
W Log4j 2.5 można wywołać Configurator.shutdown()
. Z Log4j 2.6 możesz zadzwonić pod numer LogManager.shutdown()
.
Wyjaśnienie i historia za
Co Log4j 2 stosowanie wewnętrznie jest to, co nazywają ShutdownRegistrationStrategy. Składa się z klasy rejestrującej jedno lub wiele wywołań zwrotnych wyłączania, które będą wywoływane w odpowiednim czasie. Zapewniają interfejs o nazwie ShutdownCallbackRegistry
i ich domyślną implementację o nazwie DefaultShutdownCallbackRegistry
. Ten rejestr implementacji jest sam w sobie hakiem zamykającym do JVM, z Runtime.getRuntime().addShutdownHook()
.
Zgodnie z niektórymi problemami w narzędziu do śledzenia błędów Log4j 2 (LOG4J2-868 i LOG4J2-658) właściwym sposobem jest zapewnienie własnej implementacji interfejsu ShutdownCallbackRegistry
. Ponieważ nie ma publicznego interfejsu API do zamknięcia Log4j 2, jest to jedyny prawdziwy i prawidłowy sposób archiwizowania tego.
Proponowane rozwiązanie
Więc, co zrobiłem, aby rozwiązać ten problem jest to, że realizowane własną wersję interfejsu ShutdownCallbackRegistry
. W większości robi to samo, co domyślna implementacja, ale zamiast rejestrować się jako hak zamykający, czeka, aż zostanie wywołany ręcznie. Jest to możliwe wewnętrznie poprzez utrzymywanie instancji obiektu w polu statycznym. Następnie musisz wywołać pojedynczą metodę statyczną, aby uruchomić procedurę zamykania, dlatego nazwałem ją StaticShutdownCallbackRegistry
.
Kompletne rozwiązanie i instrukcje można znaleźć na stronie GitHub/DjDCH/Log4j-StaticShutdown i wykorzystywać je we własnych projektach. Zasadniczo, na koniec, trzeba tylko zrobić coś takiego w swojej aplikacji:
StaticShutdownCallbackRegistry.invoke();
Nie mogę powiedzieć bez żadnej wątpliwości, że jest to idealne rozwiązanie i że moje wykonanie jest doskonałe, ale starałem zrobić to we właściwy sposób (zgodnie z nieistniejącą dokumentacją na ten temat). Chętnie wysłucham opinii użytkowników, jeśli uznasz to rozwiązanie za odpowiednie lub nie.
Log4j-Web Biblioteka jest preferowanym sposobem prawidłowego czyszczenia zasobów w aplikacji WWW.
Aby ją włączyć, należy dodać taką zależność do pom.xml
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-web</artifactId>
<version>${log4j2.version}</version>
<scope>runtime</scope>
</dependency>
Będzie ona działać 'out-of-the box' w Servlet 3. * środowisko. Jeśli używasz starszej specyfikacji Servlet, szczegóły, jak włączyć prawidłowe czyszczenie dla log4j2 dostępne są tutaj: https://logging.apache.org/log4j/2.x/manual/webapp.html
Prawidłowa, wciąż odpowiednia odpowiedź. –
- 1. Jak prawidłowo zamknąć gniazdo po wychwyceniu wyjątku?
- 2. Jak prawidłowo zamknąć gałąź funkcji w Mercurial?
- 3. Jak prawidłowo zamknąć serwer ASIO TPC?
- 4. Jak prawidłowo zamknąć Internet Explorer po uruchomieniu z PowerShell?
- 5. Jak prawidłowo zamknąć aplikację JAX-WS Spring na serwerze Tomcat?
- 6. Jak prawidłowo zarządzać cyklem życia logów utworzonych za pomocą wtyczek za pomocą logowania Java z log4j2
- 7. Rejestrowanie rozruchowe z log4j2?
- 8. Jak usunąć stare dzienniki z log4j2
- 9. Jak tłumić zduplikowane wiadomości w log4j2
- 10. Jak zaimplementować niestandardowy układ wzorów w log4j2
- 11. Log4J2 - Jak wyłączyć logowanie w teście jednostki?
- 12. Jak korzystać z log4j2 Commons Logowania Bridge
- 13. Jak skonfigurować aplikację null appender w log4j2
- 14. Jak zamknąć obraz?
- 15. Jak zamknąć ExecutorService?
- 16. Jak zamknąć serwer com.sun.net.httpserver.HttpServer?
- 17. Jak zamknąć gałąź-podwersję?
- 18. Jak zamknąć PushViewController?
- 19. jak zamknąć podpowiedź jQuery
- 20. Jak zamknąć oddział Git?
- 21. Jak mogę zamknąć Teamcity?
- 22. Jak zamknąć komputer?
- 23. Jak zamknąć terminal Geany
- 24. log4j2 - ograniczenie liczby plików dziennika
- 25. Jak zamknąć port 3389 bez utraty RDP?
- 26. Rejestrowanie sprężyny przy użyciu Log4j2
- 27. Aby zamknąć lub nie zamknąć połączenia Oracle?
- 28. Jak programowo zamknąć lub zamknąć program Windows Phone 8?
- 29. Jak programowo zamknąć lub zamknąć aplikację UWP? (Windows 10)
- 30. Jak prawidłowo używać gluLookAt?
Wygląda wersji 2.6 dodaje powrotem właściwa instrukcja '.shutdown', może ktoś potwierdzić? To naprawdę nie działa tutaj –