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 java.util.EnumSet;
20 import java.util.Set;
21
22 import javax.servlet.DispatcherType;
23 import javax.servlet.FilterRegistration;
24 import javax.servlet.ServletContainerInitializer;
25 import javax.servlet.ServletContext;
26 import javax.servlet.ServletException;
27
28
29
30
31
32
33 public class Log4jServletContainerInitializer implements ServletContainerInitializer {
34
35 @Override
36 public void onStartup(final Set<Class<?>> classes, final ServletContext servletContext) throws ServletException {
37 if (servletContext.getMajorVersion() > 2 && servletContext.getEffectiveMajorVersion() > 2 &&
38 !"true".equalsIgnoreCase(servletContext.getInitParameter(
39 Log4jWebSupport.IS_LOG4J_AUTO_INITIALIZATION_DISABLED
40 ))) {
41 servletContext.log("Log4jServletContainerInitializer starting up Log4j in Servlet 3.0+ environment.");
42
43 final FilterRegistration.Dynamic filter =
44 servletContext.addFilter("log4jServletFilter", Log4jServletFilter.class);
45 if (filter == null) {
46 servletContext.log("WARNING: In a Servlet 3.0+ application, you should not define a " +
47 "log4jServletFilter in web.xml. Log4j 2 normally does this for you automatically. Log4j 2 " +
48 "web auto-initialization has been canceled.");
49 return;
50 }
51
52 final Log4jWebLifeCycle initializer = Log4jWebInitializerImpl.getLog4jWebInitializer(servletContext);
53 initializer.start();
54 initializer.setLoggerContext();
55
56 servletContext.addListener(new Log4jServletContextListener());
57
58 filter.setAsyncSupported(true);
59 filter.addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class), false, "/*");
60 }
61 }
62 }