我正在登录 JSF 和 ejb 环境,每次重新部署应用程序时,.lck 文件都不会被删除,并且会创建一个新的日志(和锁定)文件(logfilename.log.2、logfilename.lck)。日志.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);
}
}
我尝试删除 ServletContextListener
的 contextDestroyed
方法中的处理程序,但似乎为时已晚,因为 Logger.getLogger("registrations") .getHandlers()
返回一个空数组,因此无需删除任何内容。
你能帮助我如何让记录器使用它在重新部署之前使用的文件吗?
最佳答案
我终于成功解决了这个问题。删除处理程序还不够,您必须对处理程序本身调用 close()
。此外,logger.getHandlers()
在 contextDestroyed
方法中工作:
for (Handler h : logger.getHandlers()) {
h.close();
}
关于java - 重新部署应用程序时创建的新日志和锁定文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12700606/