log4j2 Web 查找不起作用

Goi*_*nas 5 java spring tomcat7 log4j2

我们有基于 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)

非常感谢任何有关如何使网络查找工作的帮助。

干杯,下午

Goi*_*nas 4

如果您有一个基于 Spring 4 java 注解的 Web 应用程序,则可以log4j-slf4j-impl在类路径中包含 jar,并且仍然可以log4j2通过扩展您的 Web 初始化类Log4jServletContainerInitializer并调用super.onStartup()它来进行 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));
    }

}
Run Code Online (Sandbox Code Playgroud)

但请注意,您似乎仍然需要包含web.xml一个<display-name>节点才能在容器log4j2上进行 Web 查找Tomcat 7.0.5x

有关这一切的更多详细信息,请参阅我在 log4j 用户邮件列表线程中获得的答案:

log4j2 网页查找问题

干杯,下午。