1
2
3
4
5
6
7
8
9
10
11 package ch.qos.logback.classic.selector.servlet;
12
13 import static ch.qos.logback.classic.ClassicGlobal.JNDI_CONTEXT_NAME;
14
15 import javax.naming.Context;
16 import javax.naming.NamingException;
17 import javax.servlet.ServletContextEvent;
18 import javax.servlet.ServletContextListener;
19
20 import org.slf4j.Logger;
21 import org.slf4j.impl.StaticLoggerBinder;
22
23 import ch.qos.logback.classic.LoggerContext;
24 import ch.qos.logback.classic.selector.ContextSelector;
25 import ch.qos.logback.classic.util.JNDIUtil;
26
27 public class ContextDetachingSCL implements ServletContextListener {
28
29 public void contextDestroyed(ServletContextEvent servletContextEvent) {
30 String loggerContextName = null;
31
32 try {
33 Context ctx = JNDIUtil.getInitialContext();
34 loggerContextName = (String) JNDIUtil.lookup(ctx, JNDI_CONTEXT_NAME);
35 } catch (NamingException ne) {
36 }
37
38 if (loggerContextName != null) {
39 System.out.println("About to detach context named " + loggerContextName);
40
41 ContextSelector selector = StaticLoggerBinder.getSingleton().getContextSelector();
42 LoggerContext context = selector.detachLoggerContext(loggerContextName);
43 if (context != null) {
44 Logger logger = context.getLogger(LoggerContext.ROOT_NAME);
45 logger.warn("Stopping logger context " + loggerContextName);
46
47 context.stop();
48 } else {
49 System.out.println("No context named " + loggerContextName + " was found.");
50 }
51 }
52 }
53
54 public void contextInitialized(ServletContextEvent arg0) {
55
56 }
57
58 }