2017-08-15 1 views
1

J'utilise AsyncAppender dans l'application spring-boot (1.5.3.RELEASE).Définir le hook d'arrêt de logback dans Spring Boot

logback.xml

<appender name="FILE_ASYNC" class="ch.qos.logback.classic.AsyncAppender"> 
    <queueSize>5000</queueSize> 
    <discardingThreshold>0</discardingThreshold> 
    <appender-ref ref="FILE" /> 
</appender> 

Selon la documentation logback,

Lors de l'arrêt de l'application ou redéployer, AsyncAppender doit être arrêté afin d'arrêter et de reprendre le fil des travailleurs et rincer consignation des événements de la file d'attente.

https://logback.qos.ch/manual/appenders.html

En outre, il dit:

Afin d'éviter d'interrompre le fil des travailleurs dans ces conditions, un crochet d'arrêt peut être inséré à l'exécution JVM qui arrête la LoggerContext correctement après l'arrêt de la JVM

Je veux savoir comment op AsyncAppender dans l'application Spring Boot. A quelle place dans Spring Boot, devrais-je définir le hook d'arrêt?

Répondre

5

Ajoutez simplement l'instruction <shutdownHook/> à votre logback.xml. Par exemple:

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 

    <shutdownHook class="ch.qos.logback.core.hook.DelayingShutdownHook"/> 

    <appender name="FILE_ASYNC" class="ch.qos.logback.classic.AsyncAppender"> 
     <queueSize>5000</queueSize> 
     <discardingThreshold>0</discardingThreshold> 
     <appender-ref ref="FILE" /> 
    </appender> 

    <!-- the rest of your logback config --> 

</configuration> 

Avec cela en place, vous remarquerez le message de journal suivant est émis lorsque Logback configure lui-même:

INFO en ch.qos.logback.core.joran.action. ShutdownHookAction - A propos d'instancier crochet d'arrêt de type [ch.qos.logback.core.hook.DelayingShutdownHook]

0

Vous devez définir pas le crochet d'arrêt explicitement depuis la version 1.1.10 de logback. À partir de la version 1.1.10, le logback prend soin d'arrêter le contexte de logback-classic actuel (et tous les appenders) lorsque l'application web est arrêtée ou rechargée. Essayez de mettre à jour votre version de logback et vérifiez une fois.

Voici la doc mise à jour: https://logback.qos.ch/manual/configuration.html#webShutdownHook

0

J'ai eu un problème similaire, mais avec la version 1.1.6 de logback et au printemps démarrage 1.5.4. La solution pour moi était d'ajouter:

logging.register-shutdown-hook=true 

au fichier application.properties pour inviter

org.springframework.boot.logging.logback.LogbackLoggingSystem pour arrêter la LoggerContext sur appel ApplicationContext.close.