java - 从 servlet 上下文销毁事件记录

标签 java log4j2 servlet-3.0

在我基于 Servlet 的应用程序中,我想记录启动和关闭事件。

我已尝试实现 ServletContextListener 接口(interface)来执行此操作:

public class DiagnosticListener
    implements ServletContextListener {

    private static final Logger LOG = LogManager.getLogger(DiagnosticListener.class);

    @Override
    public void contextInitialized( final ServletContextEvent sce ) {
        LOG.info("Context initialized.");
    }

    @Override
    public void contextDestroyed( final ServletContextEvent sce ) {
        LOG.info("Context destroyed.");
    }
}

已初始化的事件按预期记录,但已销毁的事件从未出现。我假设这与 log4j2 如何使用类似的监听器管理其生命周期有关,在此事件期间日志记录基础结构不再可用。

有没有办法记录应用程序关闭的事件?

最佳答案

我们与 Logback 发生了类似的问题。 您必须编写自己的 web.xml 来解决这个问题,因为没有其他方法可以定义监听器顺序。

我们禁用了 LogbackServletContextListener:

<context-param>
    <param-name>logbackDisableServletContainerInitializer</param-name>
    <param-value>true</param-value>
</context-param>

然后手动添加 LogbackServletContextListener 作为第一个监听器:

<listener>
    <listener-class>ch.qos.logback.classic.servlet.LogbackServletContextListener</listener-class>
</listener>

然后是所有其他听众。

不知道 log4j,但我认为有类似的东西......

编辑:是的,有:

<context-param>
    <param-name>isLog4jAutoInitializationDisabled</param-name>
    <param-value>true</param-value>
</context-param>

来源:https://logging.apache.org/log4j/2.x/manual/webapp.html

关于java - 从 servlet 上下文销毁事件记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37557754/

相关文章:

java - 概率为 50% 和 50% 的抛硬币游戏

java - 使用 "/"创建 servlet url-pattern

tomcat7 - Tomcat 7-Servlet 3.0:常量池中的无效字节标记

java - 实现接口(interface)的抽象类有什么用

java - Activity 不是封闭类(android studio)

java - MANIFEST.MF 中的条目顺序

java - Log4j2 编程消息替换(Log4j 中 PatternLayout 的替换)

java - Log4j2 - RootLogger 附加程序不工作

Java如何配置log4j2

java - 如何将json中的响应发送到servlet中的树结构