[JAVA] So beheben Sie das Problem, dass beim Stoppen der Webanwendung kein Protokollierungsprotokoll ausgegeben wird

Neulich ... Ich bin auf ein Ereignis gestoßen, bei dem das Protokoll nicht ausgegeben wurde, als die Webanwendung gestoppt wurde: cry: Ich werde die Ursache und Lösung aufschreiben.

Anwendungskomponenten

Die Komponenten (grobe Komponenten) der Anwendung, in der dieses Ereignis aufgetreten ist, sind wie folgt.

Warum wurde das Protokoll nicht ausgegeben?

Die Ursache war, dass "der Prozess zum Stoppen der Protokollausgabefunktion von Logback" zuerst in dem Prozess (Verwerfungsprozess) aufgerufen wurde, der ausgeführt wurde, als die Webanwendung gestoppt wurde.

Grob gesagt wurde der Prozess im folgenden Ablauf ausgeführt.

Wer hat die Protokollausgabefunktion von Logback gestoppt?

Logback (logback-classic) enthält eine Klasse namens "LogbackServletContainerInitializer". Bei der Bereitstellung auf einem Anwendungsserver, der Servlet 3.0 oder höher unterstützt, wird die Klasse "LogbackServletContextListener" automatisch im Servlet-Container registriert. Ich tat. In diesem Fall wurde "Prozess zum Stoppen der Protokollausgabefunktion von Logback" in der "contextDestroyed" -Methode von "LogbackServletContextListener" implementiert.

Wie kann ich das Protokoll ausgeben?

In diesem Fall ...

Mit einem solchen Gefühl scheint es, dass "der Prozess des Stoppens der Protokollausgabefunktion von Logback" ganz am Ende ausgeführt werden sollte.

Deaktivieren Sie die automatische Registrierung von "LogbackServletContextListener"

So ändern Sie die Verarbeitungsreihenfolge ... Deaktivieren Sie zunächst die automatische Registrierungsfunktion von "LogbackServletContextListener". Es gibt verschiedene Möglichkeiten, es zu deaktivieren. In diesem Eintrag wird jedoch gezeigt, wie Sie es mithilfe der Parameter des Servlet-Containers deaktivieren können.

<context-param>
    <param-name>logbackDisableServletContainerInitializer</param-name>
    <param-value>true</param-value>
</context-param>

NOTE:

Sie kann auch mithilfe von Systemeigenschaften oder Umgebungsvariablen deaktiviert werden.

  • http://logback.qos.ch/manual/configuration.html#webShutdownHook

Fügen Sie manuell "LogbackServletContextListener" hinzu

Definieren Sie nach dem Deaktivieren der automatischen Registrierung die Klasse "LogbackServletContextListener" vor der Listener-Klasse ("ContextLoaderListener"), um den Spring-Anwendungskontext zu initialisieren / zu zerstören.

<listener>
    <listener-class>ch.qos.logback.classic.servlet.LogbackServletContextListener</listener-class>
</listener>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

Auf diese Weise wird (vorerst ... in Tomcat) nach Durchführung des "Spring Application Context Destruction Process" der "Logback Log Output Function Stop Process" ausgeführt.

ähnliche Links

Recommended Posts

So beheben Sie das Problem, dass beim Stoppen der Webanwendung kein Protokollierungsprotokoll ausgegeben wird
Logback-Protokoll wird nicht ausgegeben, wenn die Serveranwendung geschlossen wird
Informationen zum Problem, dass das Image nach der AWS-Bereitstellung nicht angezeigt wird
Fälle, in denen Benutzer beim Bearbeiten einer App abgemeldet sind (Rails)
So lösen Sie das Problem, dass die Bean beim Verschachteln in Spring Batch nicht ordnungsgemäß verarbeitet wird
Wenn der Schwebeflug von Eclipse schwer zu sehen ist
Turbolinks: Ich möchte das Problem lösen, dass JS nicht richtig angezeigt wird, es sei denn, es wird beim Übergang mit link_to neu geladen
Beim Ändern des Controllers von Spring Web MVC in kotlin, @Autowired Die angegebene Komponente wird nicht injiziert und wird null
[Android Studio] Über die Tatsache, dass die Entwurfsansicht bei Verwendung von TextClock nicht angezeigt wird
[Java] Das Problem, dass hochgeladene Bilder aufgrund des Einflusses des Caches nicht aktualisiert werden
Ein Memo des Programms, mit dem Sie feststellen können, dass die Wahrscheinlichkeit eines Würfelwurfs etwa 1/6 beträgt
So lösen Sie das Problem, wenn der Wert nicht gesendet wird, wenn das Formular in Schienen deaktiviert und gesendet wird
Wenn im Docker-Protokoll keine Ausgabe für stdout vorhanden ist
Ich möchte die Protokollausgabeeinstellung von UtilLoggingJdbcLogger ändern
Die Idee, abzuschalten, wenn der Fehler nicht behoben ist
[Schienen] Wenn die Layoutänderung des Geräts nicht berücksichtigt wird
So erhalten Sie das Protokoll, wenn install4j nicht gestartet wird
So lösen Sie das Problem, dass das Website-Image nach der Bereitstellung auf Heroku in Rails 5 nicht angezeigt wird
[Firebase] Firebase Auth currentUser wird auch nach der Deinstallation der App nicht null
So lösen Sie das Problem, dass Aptana Studio nicht gestartet wird
Zusammenfassung der Probleme, bei denen ich mich nicht bei firebase anmelden konnte
So geben Sie den Wert aus, wenn sich ein Array im Array befindet
[WSL] Lösung für das Phänomen, dass 404 angezeigt wird, wenn versucht wird, Java mit apt einzufügen (persönliches Memo)
Exportieren (Ausgeben) einer großen Menge von CSVs, z. B. Protokollinformationen in der WEB-Anwendung, mit der Rails-Anwendung
[RSpec] Wenn Sie die Instanzvariable des Controllers im Test verwenden möchten [Zuweisungen wird nicht empfohlen]
[Rails] So lösen Sie das Problem, dass das Standardbild beim Bearbeiten überschrieben wird, ohne das Bild hochzuladen [Active Storage]
Über die Angelegenheit, die tendenziell mit ARG von Dockerfile verwechselt wird, einem mehrstufigen Build
Informationen zur Protokollebene von java.util.logging.Logger
Für Sie, die beklagen, dass die Konvertierung von JODConverter + LibreOffice langsam ist
Der Standpunkt bei der Codeüberprüfung einer Webanwendung (Rails)
[Schienen] Über den Fehler, dass das Bild nicht in der Produktionsumgebung angezeigt wird
Talend WebAPI-Lösung für Komponenten, die Cookies speichern, wenn Daten abgerufen werden
Problem, dass db nicht migriert werden kann: Migration beim Hinzufügen von Sorcery-Submodulen
So beschränken Sie die Aktion des Übergangsziels, wenn Sie nicht angemeldet sind
Die Geschichte, dass das Servlet nicht in die Java-Webanwendung geladen werden konnte
[Schienen] Was tun, wenn das Refile-Bild beim Schreiben der Verarbeitung zum Zeitpunkt des Routing-Fehlers nicht angezeigt wird?
Ich habe versucht, eine Webanwendung zu erstellen, die Tweets mit einer Vue-Word-Cloud durchsucht und die Tendenz untersucht, was im zugehörigen Profil geschrieben steht
Was ist ein Test? ・ Über die Wichtigkeit eines Tests
Geben Sie den HTTP-Header des zu protokollierenden Google-http-Clients aus
Ausgabe des Buches "Einführung in Java"
Möglichkeit bei der Bereitstellung auf EC2, aber im Fehlerprotokoll wird nichts angezeigt
Upcast (Java), das den Änderungsbetrag reduzieren kann, wenn die Spezifikation geändert wird
Festlegen, wann in junit "Der Konstruktor Empty () ist nicht sichtbar" auftritt
Ist es Mainstream, das schließende Tag des <P> -Tags nicht in Javadoc zu schreiben?
[Swift] Wenn die Anwendung iOS 11 oder höher unterstützt, war es nicht erforderlich, Int und Int64 ordnungsgemäß zu verwenden