簡體   English   中英

Log4j Logger無法登錄某些方法

[英]Log4j Logger not logging in some methods

我正在用一個非常簡單的代碼運行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()函數相對應的消息。

關於會發生什么的任何想法?

謝謝,克里斯

終於,我明白了發生了什么。 雖然,我不明白。

該問題是由於上述代碼中顯示的注釋和web.xml內容中的servlet配置和init參數沖突而引起的。 VaadinServlet被定義了兩次,具有不同的配置,包括log4j庫的配置文件。 有時,即使在同一個對象內部,該servlet仍在使用一個,而有時又在使用另一個!

所以,我把它解決了,但是我不明白為什么它真的發生了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM