J'utilise Spring Boot 1.5.4 et j'essaye d'écrire un démarreur qui inclurait un appender journal personnalisé pour toute application l'utilisant. Voici comment je l'enregistre:enregistrer appender journal personnalisé dans le démarreur de démarrage au printemps
@Override
synchronized public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
if (!addedCustomAppender && metricProperties.isEnabled()) {
//Add log appender for Monitoring
EventsPublisher eventsPublisher = contextRefreshedEvent.getApplicationContext().getBean(EventsPublisher.class);
final Appender<ILoggingEvent> newAppender = new CustomLogbackAppender(eventsPublisher);
LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();
final Logger root = context.getLogger("ROOT");
newAppender.setName("Custom Appender");
newAppender.setContext(context);
newAppender.start();
root.addAppender(newAppender);
addedCustomAppender = true;
}
}
Ceci est appelé, et je peux voir l'enregistreur racine ayant l'appender. Cela fonctionne réellement pendant quelques secondes au démarrage de l'application.
Mais très rapidement, plus tard au cours du démarrage de l'application, un événement ApplicationEnvironmentPreparedEvent est déclenché, ce qui déclenche une sorte de réinitialisation dans LoggingApplicationListener.
Cela se produit juste après que je vois dans les journaux:
INFO 15888 --- [ main] o.s.c.support.DefaultLifecycleProcessor : Starting beans in phase -2147482648
dans LogbackLoggingSystem, je peux voir un appel à la méthode stopAndReset, qui appelle la méthode recursiveReset sur Bûcherons. Après cela, Spring config par défaut est chargé, et mon appender personnalisé n'est plus là.
Comment puis-je éviter que cela se produise, afin que mon appender personnalisé obtienne des journaux le plus tôt possible et reste attaché à l'enregistreur ROOT?
ou au moins comment puis-je enregistrer mon appender après que tout a été initialisé? (dans ce cas, je suppose que je manquerais certains journaux, donc ce n'est pas ma solution cible)
Merci!
Merci, ça marche! J'avais un sale problème qui consistait à le ré-attacher chaque fois que je trouvais que ce n'était plus là, mais c'est beaucoup mieux! –
Note supplémentaire: avec la configuration automatique activée, pas besoin d'ajouter l'écouteur manuellement dans la méthode principale de l'application avec des écouteurs (..): l'auditeur sera automatiquement enregistré –