我们有基于Spring Java的Web部署,该部署使用log4j2.xml将消息记录到文件等.
现在,我们需要更新log4j2.xml配置,以便能够在其中进行${web:contextPath} Web查找,以便我们可以将部署的上下文名称用作日志文件名称的一部分,记录程序会将消息记录到该上下文名称中. .但是,当我们部署应用程序时,log4j2配置无法识别任何与Web查找相关的内容.创建用于将消息记录到的文件只是使用名称${web创建的,实际上没有消息记录在其中.
当在3.0 Servlet中运行时,我已经在线阅读了与log4j2 Web查找有关的各种文档,但是我仍然看不到我们的配置中可能存在什么问题.而且我不知道要在log4j的跟踪日志中查找什么,以查看我们缺少的是什么.
我们的堆栈:
Windows和Linux操作系统
Java 8
Tomcat 7.0.5x
log4j-xxx 2.2(log4j-api,log4j-core,log4j-slf4j-impl,log4j-jcl,log4j-web全部在类路径中)
非常感谢任何有关如何使Web查找正常工作的帮助.
干杯,
下午
解决方法:
如果您有一个基于Spring 4 Java注释的Web应用程序,则可以通过使Web初始化类扩展Log4jServletContainerInitializer并在其上调用super.onStartup()来在类路径中包含log4j-slf4j-impl jar并仍然进行log4j2 Web查找. .
例:
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 Web查找在Tomcat 7.0.5x容器上工作.
有关所有这些的更多详细信息,请参阅我在log4j用户邮件列表线程中得到的答案:
干杯,
下午.
标签:log4j2,tomcat7,spring,java 来源: https://codeday.me/bug/20191120/2044465.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。