2

我正在登录 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方法中的处理程序ServletContextListener,但似乎为时已晚,因为Logger.getLogger("registrations").getHandlers()返回一个空数组,所以没有什么可删除的。

你能帮我如何让记录器在重新部署之前使用它使用的文件吗?

4

1 回答 1

2

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

for (Handler h : logger.getHandlers()) {
  h.close();
}
于 2012-11-25T02:34:57.457 回答