我们有基于Spring java的Web部署,它使用log4j2.xml将消息记录到文件等。
我们现在需要更新我们的log4j2.xml配置,以便能够在其中执行$ {web:contextPath} Web查找,以便我们可以使用部署的上下文名称作为记录器的日志文件名称的一部分将消息记录到。但是,当我们部署应用程序时,log4j2配置无法识别任何与Web查找相关的内容。创建用于记录消息的文件只是使用名称${web
创建的,并且实际上没有消息记录在其中。
我在3.0 servlet中运行时已经阅读了与log4j2 web查找相关的各种在线文档,但我仍然无法看到我们的配置中可能存在的问题。我不知道在log4j的跟踪日志中要查找什么,以便查看我们缺少的内容。
我们的筹码:
Windows and Linux OSes
Java 8
Tomcat 7.0.5x
log4j-xxx 2.2 (log4j-api, log4j-core, log4j-slf4j-impl, log4j-jcl, log4j-web all in classpath)
非常感谢有关如何让网页查找正常工作的任何帮助。
干杯, PM
答案 0 :(得分:3)
如果您有一个基于Spring 4 java注释的Web应用程序,则可以在类路径中使用log4j-slf4j-impl
jar,并通过使您的Web初始化类扩展{{1}来进行log4j2
Web查找并在其上调用Log4jServletContainerInitializer
。
示例:
super.onStartup()
但请注意,您似乎仍需要让import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import org.apache.logging.log4j.web.Log4jServletContainerInitializer;
import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.ContextLoaderListener;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
public class WebInitialiser extends Log4jServletContainerInitializer implements WebApplicationInitializer {
public void onStartup(ServletContext servletContext)
throws ServletException {
super.onStartup(null, servletContext);
AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
rootContext.register(ApplicationConfig.class, IntegrationConfig.class,
JmsConfig.class, JmxConfig.class);
servletContext.addListener(new ContextLoaderListener(rootContext));
}
}
包含web.xml
节点,以便<display-name>
网络查找能够在log4j2
容器上运行。
有关所有这些的更多详细信息,请参阅我在log4j用户邮件列表主题中获得的答案:
干杯, PM。