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 に答える