1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.logging.log4j.web;
18
19 import javax.servlet.ServletContext;
20 import javax.servlet.ServletContextEvent;
21 import javax.servlet.ServletContextListener;
22
23 import org.apache.logging.log4j.Logger;
24 import org.apache.logging.log4j.status.StatusLogger;
25
26
27
28
29
30
31 public class Log4jServletContextListener implements ServletContextListener {
32
33 private static final Logger LOGGER = StatusLogger.getLogger();
34
35 private ServletContext servletContext;
36 private Log4jWebLifeCycle initializer;
37
38 @Override
39 public void contextInitialized(final ServletContextEvent event) {
40 this.servletContext = event.getServletContext();
41 LOGGER.debug("Log4jServletContextListener ensuring that Log4j starts up properly.");
42
43 this.initializer = WebLoggerContextUtils.getWebLifeCycle(this.servletContext);
44 try {
45 this.initializer.start();
46 this.initializer.setLoggerContext();
47 } catch (final IllegalStateException e) {
48 throw new IllegalStateException("Failed to initialize Log4j properly.", e);
49 }
50 }
51
52 @Override
53 public void contextDestroyed(final ServletContextEvent event) {
54 if (this.servletContext == null || this.initializer == null) {
55 throw new IllegalStateException("Context destroyed before it was initialized.");
56 }
57 LOGGER.debug("Log4jServletContextListener ensuring that Log4j shuts down properly.");
58
59 this.initializer.clearLoggerContext();
60 this.initializer.stop();
61 }
62 }