重新部署应用程序时创建的新日志和锁定文件

时间:2012-10-03 01:01:58

标签: java jsf logging

我正在登录JSF和ejb环境,每次重新部署我的应用程序时,.lck文件都不会被删除,并且会创建一个新的日志(和锁)文件(logfilename.log.2,logfilename。 log.3 ......)

这是我获取日志并在JSF托管bean中添加文件处理程序的方法:

static {
  // (...)
  logger = Logger.getLogger("registrations");
  FileHandler fh;
  try {
    // (...)
    fh = new FileHandler(registerLogPath, true);
    fh.setFormatter(new Formatter() {

      @Override
      public String format(LogRecord record) {
        return ...
      }  
    });
    logger.addHandler(fh);
  } catch (IOException | SecurityException ex) {
    logger.log(Level.SEVERE, null, ex);
  }
}

我尝试在contextDestroyed的{​​{1}}方法中删除处理程序,但似乎为时已晚,因为ServletContextListener返回一个空数组,所以无需删除。

您可以帮我解决如何让logger在重新部署之前使用它所使用的文件吗?

1 个答案:

答案 0 :(得分:2)

我终于设法解决了这个问题。删除处理程序是不够的,您必须在处理程序本身上调用close()。另外,logger.getHandlers()适用于contextDestroyed方法:

for (Handler h : logger.getHandlers()) {
  h.close();
}