Hi Ralph, I had a dig around to see what might be triggering the log4j configuration off before the servlet has had a chance to initialise and, I believe it might be the Spring code itself?
Our deployments are all Spring 4 and java annotation based. i.e. no xml configuration aside from simple WEB-INF/web.xml file. So, a deployment init and startup is generally kicked off via the following code: import javax.servlet.ServletContext; import javax.servlet.ServletException; import org.springframework.web.WebApplicationInitializer; import org.springframework.web.context.ContextLoaderListener; import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; public class WebInitialiser implements WebApplicationInitializer { public void onStartup(ServletContext servletContext) throws ServletException { // log4j2 web lookup caused by the creation of the rootContext object. AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext(); rootContext.register(ApplicationConfig.class, IntegrationConfig.class, JmsConfig.class, JmxConfig.class); servletContext.addListener(new ContextLoaderListener(rootContext)); } } Now, I think the log4j2's web lookup failure arises because of the creation of the AnnotationConfigWebApplicationContext class object (If I comment the creation of that object out, then the servlet starts up okay and log4j2's web lookup resolves okay too - but of course the servlet is useless as it no longer has our business code loaded behind it!). I had a look inside the AnnotationConfigWebApplicationContext class and, I can see that the class extends org.springframework.context.support.AbstractApplicationContext which has the following line: protected final Log logger = LogFactory.getLog(getClass());. The Log and LogFactory classes are imported as follows: import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; Can this be the reason why the log4j2 configuration is being scanned before the servlet context has had a chance to initialise? And therefore log4j2 is unable to do the web lookup? The spring-web project does have a web-fragment defined in it called spring_web and in my deployment's web.xml I have tried including the following snippet: <display-name>service-name</display-name> <absolute-ordering> <name>log4j</name> <name>spring_web</name> <others/> </absolute-ordering> But it doesn't solve the web lookup issue. (I am not sure how to prove whether the fragment ordering is actually being followed during startup though...) Any thoughts on any of this would be much appreciated. I have so far not even have any workarounds for this issue... Cheers, PM.