Do I need to flush events when shutting down using logback?

0 votes
asked Sep 9, 2010 by mike-schall

We are migrating to logback from log4j for several web apps. In the shutdown of our application we currently call:

org.apache.log4j.LogManager.shutdown();

Which is supposed to flush all async logging and close all external resources (files, sockets).

Is there something similar in logback or does it somehow flush automatically on shutdown?

Mike

4 Answers

0 votes
answered Sep 9, 2010 by paul-gregoire

I'm not aware of an overall manager shutdown like log4j's but I close all my individual context loggers when their context is destroyed using a ServletContextListener like so:

ContextSelector selector = StaticLoggerBinder.getSingleton().getContextSelector();
LoggerContext context = selector.detachLoggerContext(contextName);
if (context != null) {
    Logger logger = context.getLogger(Logger.ROOT_LOGGER_NAME);
    context.reset();
} else {
    System.err.printf("No context named %s was found", contextName);
}

Also, LoggerContext.stop() is svailable and does some of the same functions internally but I don't use it, so I can't comment on whether its better than reset or not.

0 votes
answered Sep 4, 2011 by david-roussel

Here's a simple approach:

import org.slf4j.ILoggerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import ch.qos.logback.classic.LoggerContext;

...

ILoggerFactory loggerFactory = LoggerFactory.getILoggerFactory();
// Check for logback implementation of slf4j
if (loggerFactory instanceof LoggerContext) {
    LoggerContext context = (LoggerContext) loggerFactory;
    context.stop();
}
0 votes
answered Sep 24, 2015 by sasha

It seems that just adding <shutdownHook/> into configuration should stop the context.

From logback docs:

<configuration>
   <!-- in the absence of the class attribute, assume 
   ch.qos.logback.core.hook.DelayingShutdownHook -->
   <shutdownHook/>
  .... 
</configuration>

And from DelayingShutdownHook summary:

ShutdownHook implementation that stops the Logback context after a specified delay. The default delay is 0 ms (zero).

0 votes
answered Sep 15, 2017 by sourabh-mahajan

Version 1.1.10 onwards, logback takes care of stopping the current logback-classic context when the web-app is stopped or reloaded.

Here's the updated doc: https://logback.qos.ch/manual/configuration.html#webShutdownHook

Welcome to Q&A, where you can ask questions and receive answers from other members of the community.
Website Online Counter

...