Log4j Logger没有登录某些方法

时间:2015-06-09 13:13:44

标签: java log4j vaadin

我正在使用非常简单的代码运行Vaadin Servlet,我想在应用程序启动/结束时使用Log4j进行登录,并且对于客户端的会话也是如此。但是,只有一些记录的消息最终会写入日志文件本身。

servlet的代码如下:

@WebServlet(value = "/*", asyncSupported = true)
@VaadinServletConfiguration(productionMode = false, ui = MyVaadinUI.class, widgetset = "som.vaadin.AppWidgetSet")
public static class Servlet extends VaadinServlet implements SessionInitListener, SessionDestroyListener {

private static final Logger LOGGER = LogManager.getLogger(Servlet.class);

@Override
protected void servletInitialized() throws ServletException   {
    super.servletInitialized();
    LOGGER.info("App started");
    getService().addSessionInitListener(this);
    getService().addSessionDestroyListener(this);
}

@Override
public void destroy() {
    LOGGER.info("App stopped");
    super.destroy();
}

@Override
public void sessionInit(SessionInitEvent event) {
    LOGGER.info("Session started");
}

@Override
public void sessionDestroy(SessionDestroyEvent event) {
    LOGGER.info("Session expired");
}
}

我的log4j日志配置文件如下:

log4j.rootLogger=DEBUG, console, RollingAppender
log4j.appender.RollingAppender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.RollingAppender.File=c:/temp/log/error_som.log
log4j.appender.RollingAppender.DatePattern='.'yyyy-ww
log4j.appender.RollingAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.RollingAppender.layout.ConversionPattern= [%d{ISO8601}] %5p%6.6r[%t]%x(%F:%L) - %m%n

最后,我在日志文件中得到的只是:

  

[2015-06-09 14:17:18,197] INFO 6042(MainBusiness.java:122) - 应用已开始

我已通过调试检查调用了sessionInit(),并且还执行了其中的LOGGER.info()调用。但是,log4j Appender只接收了与servletInitialized()函数对应的消息。

有关可能发生的事情的任何想法吗?

谢谢, 克里斯

1 个答案:

答案 0 :(得分:0)

最后,我得到了正在发生的事情。虽然,我无法理解。

问题是由上面代码中显示的注释中的servlet配置和init-params冲突以及web.xml的内容引起的。 VaadinServlet定义了两次,具有不同的配置,包括log4j库的配置文件。有时候,servlet正在使用一个,有时它正在使用另一个,甚至在同一个对象中!

所以,我解决了它,但我不明白为什么它真的发生了。