kullanarak LogDestroyed Loger'e bir (Vaadin) sunucu uygulamasının durdurulduğunu, bu SLF4J ve Log4j2'yi kullanarak bir ileti yazmaya çalışıyorum.Içerikte günlük çıktısı yok ServletContextListener & SLF4J
Bunun için, uygulama başlatıldığında bir ileti kaydeden bir ServletContextListener
kullanıyorum. Ancak contextDestroyed
yönteminin içine giriş herhangi bir çıktı alamıyor olmuştur ... İşte benim uygulamasıdır: Bu noktada
@WebListener
public class VaadinLogger implements ServletContextListener {
private static final Logger logger = LoggerFactory.getLogger(VaadinLogger.class);
@Override
public void contextInitialized(ServletContextEvent contextEvent) {
// Remove appenders from JUL loggers
SLF4JBridgeHandler.removeHandlersForRootLogger();
// Install bridge
SLF4JBridgeHandler.install();
// Get servlet context
ServletContext context = contextEvent.getServletContext();
// Retrieve name
String name = context.getServletContextName();
// Log servlet init information
logger.info("Start \"{}\"", name);
}
@Override
public void contextDestroyed(ServletContextEvent contextEvent) {
// Get servlet context
ServletContext context = contextEvent.getServletContext();
// Retrieve name
String name = context.getServletContextName();
// Log servlet destroy information
logger.info("End \"{}\"{}", name, System.lineSeparator()));
// Uninstall bridge
SLF4JBridgeHandler.uninstall();
}
}
, ben noktada contextDestroyed
de denir, çünkü bu muhtemelen günlüğü tahmin ediyorum artık mümkün değil çünkü çöp toplayıcı tarafından çoktan imha edildi.
Şimdi benim sorum şu ki, oturumun bağlamı yok edilmeden önce sunucu uygulamasının durduğunu veya log4j2 günlükleri yok edilmeden önce contextlistener uygulamasının yürütülmesini sağlamak mümkün mü?
Şimdiden teşekkürler!
Eğer günlükçüsüne canlı başvuru varsa, o zaman çöp toplandı değil. ServletContext'in gerçekten yok edildiğinden emin misiniz? Yıkımına neden olan nedir? – RealSkeptic
Tomcat sunucusunu durdurduğumda bağlamın zarar görmesini umuyorum. Bunun çalıştığını düşünüyorum çünkü 'SLF4JBridgeHandler.uninstall();' konsol çıktısında bazı hatalar düzeltildi. Ayrıca 'logger.info (… '' '' '' '' '' '' '' '' '' '' '' '' '. '.printprintprintln (((((((((((((((((... konsola yazdırılır – Kryptoxx
Konteyneri incelikle kapattın mı yoksa JVM'yi aniden mi sonlandırdın mı? Sık sık Eclipse'i kullanarak * Console * sekmesindeki kırmızı düğmenin kapsayıcıyı kapatacağını düşünürken, hemen hemen JVM. * Sunucular * sekmesindeki kırmızı düğmeyi kullanmalısınız (ya da sağ tıklatma sunucusu ve "Durdur" u seçmelisiniz.) – BalusC