java-log4j2 Web查找不起作用

我们有基于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 web lookup questions

干杯,
下午.

上一篇:java-使用Log4j 2记录日志


下一篇:java-Log4j2无法正确登录到Graylog服务器