[JAVA] Comment résoudre le problème de non-sortie du journal de connexion lorsque l'application Web est arrêtée

L'autre jour ... j'ai rencontré un événement selon lequel le journal n'était pas sorti lors de l'arrêt de l'application Web: cry: J'écrirai la cause et la solution.

Composants d'application

Les composants (composants approximatifs) de l'application dans laquelle cet événement s'est produit sont les suivants.

Pourquoi le journal n'était-il pas sorti?

La cause était que "le processus d'arrêt de la fonction de sortie de journal de Logback" était appelé en premier dans le processus (processus de suppression) exécuté lorsque l'application Web était arrêtée.

En gros, le processus a été exécuté dans le flux suivant.

Qui a arrêté la fonction de sortie de journal de Logback?

Logback (logback-classic) inclut une classe appelée LogbackServletContainerInitializer, et lorsqu'elle est déployée sur un serveur d'applications prenant en charge Servlet 3.0 ou supérieur, la classe LogbackServletContextListener est automatiquement enregistrée dans le conteneur de servlet. J'ai fait. Dans ce cas, "Processus pour arrêter la fonction de sortie de journal de Logback" a été implémenté dans la méthode contextDestroyed de LogbackServletContextListener.

Comment puis-je sortir le journal?

Dans ce cas ...

Avec un tel sentiment, il semble que "le processus d'arrêt de la fonction de sortie du journal de Logback" devrait être exécuté à la toute fin.

Désactiver l'enregistrement automatique de LogbackServletContextListener

Pour changer l'ordre de traitement ... Tout d'abord, désactivez la fonction d'enregistrement automatique de LogbackServletContextListener. Il existe plusieurs façons de le désactiver, mais cette entrée vous montrera comment le désactiver à l'aide des paramètres du conteneur de servlet.

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

NOTE:

Il peut également être désactivé à l'aide des propriétés système ou des variables d'environnement.

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

Ajoutez manuellement LogbackServletContextListener

Après avoir désactivé l'enregistrement automatique, définissez la classe LogbackServletContextListener avant la classe d'écouteur ( ContextLoaderListener) pour initialiser / détruire le contexte d'application Spring.

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

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

En faisant cela, (pour le moment ... dans Tomcat), après l'exécution du "processus de destruction du contexte d'application Spring", le "processus d'arrêt de la fonction de sortie du journal Logback" est maintenant exécuté.

Liens connexes

Recommended Posts

Comment résoudre le problème de non-sortie du journal de connexion lorsque l'application Web est arrêtée
Le journal de journalisation n'est pas généré lorsque l'application serveur est fermée
À propos du problème selon lequel l'image n'est pas affichée après le déploiement AWS
Cas où les utilisateurs sont déconnectés lors de la modification d'une application (rails)
Comment résoudre le problème que le bean n'est pas traité correctement lorsqu'il est imbriqué dans Spring Batch
Quand le survol d'Eclipse est difficile à voir
Turbolinks: je veux résoudre le problème que JS ne s'affiche pas correctement à moins d'être rechargé lors de la transition avec link_to
Lors du changement du contrôleur de Spring Web MVC en kotlin, @Autowired Le composant spécifié n'est pas injecté et devient nul
[Android Studio] À propos du fait que la vue de conception n'est pas affichée lors de l'utilisation de TextClock
[Java] Le problème selon lequel les images téléchargées ne sont pas mises à jour en raison de l'influence du cache
Un mémo du programme que vous pouvez réaliser que la probabilité de lancer des dés est d'environ 1/6
Comment résoudre le problème lorsque la valeur n'est pas envoyée lorsque le formulaire est désactivé dans les rails et envoyé
Lorsqu'il n'y a pas de sortie vers stdout dans le journal du docker
Je souhaite modifier le paramètre de sortie du journal de UtilLoggingJdbcLogger
L'idée de couper quand l'erreur n'est pas résolue
[Rails] Lorsque le changement de disposition du dispositif n'est pas reflété
Comment obtenir le journal lorsque install4j ne démarre pas
Comment résoudre le problème que l'image du site Web ne s'affiche pas après le déploiement sur heroku dans Rails 5
[Firebase] Firebase Auth currentUser ne devient pas nul même après la désinstallation de l'application
Comment résoudre le problème qu'Aptana Studio ne démarre pas
Résumé des problèmes auxquels je n'ai pas pu me connecter à Firebase
Comment afficher la valeur lorsqu'il y a un tableau dans le tableau
[WSL] Solution pour le phénomène que 404 est affiché lors de la tentative d'insertion de Java avec apt (mémo personnel)
Exporter (sortie) une grande quantité de csv comme les informations de journal sur l'application WEB avec l'application Rails
[RSpec] Lorsque vous souhaitez utiliser la variable d'instance du contrôleur dans le test [attribuer n'est pas recommandé]
[Rails] Comment résoudre le problème d'écrasement de l'image par défaut lors de l'édition sans télécharger l'image [Active Storage]
À propos du sujet qui a tendance à être confondu avec ARG de Dockerfile qui est une construction en plusieurs étapes
À propos du niveau de journalisation de java.util.logging.Logger
A vous qui regrettez que la conversion de JODConverter + LibreOffice soit lente
Le point de vue lors de la révision du code d'une application web (Rails)
[Rails] À propos de l'erreur selon laquelle l'image n'est pas affichée dans l'environnement de production
Talend WebAPI Solution pour le composant qui enregistre le cookie lors de la récupération des données
Problème de ne pas pouvoir db: migrer lors de l'ajout de sous-modules Sorcery
Comment contraindre l'action de la destination de transition lorsqu'elle n'est pas connectée
L'histoire selon laquelle le servlet n'a pas pu être chargé dans l'application Web Java
[Rails] Que faire lorsque l'image Refile n'est pas affichée lors de l'écriture du traitement au moment de l'erreur de routage
J'ai essayé de créer une application Web qui recherche les tweets avec vue-word cloud et examine la tendance de ce qui est écrit dans le profil associé
Qu'est-ce qu'un test? ・ À propos de l'importance d'un test
Sortie de l'en-tête HTTP de google-http-client à journaliser
Sortie du livre "Introduction à Java"
Possibilité lors du déploiement sur EC2 mais rien n'est affiché dans le journal des erreurs
Upcast (Java) qui peut réduire la quantité de changement lorsque la spécification est modifiée
Comment définir quand "Le constructeur Empty () n'est pas visible" se produit dans junit
Est-il courant de ne pas écrire la balise de fermeture de la balise <P> dans Javadoc?
[Swift] Si le support de l'application est iOS 11 ou version ultérieure, il n'était pas nécessaire d'utiliser correctement Int et Int64