我正在登录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在重新部署之前使用它所使用的文件吗?
答案 0 :(得分:2)
我终于设法解决了这个问题。删除处理程序是不够的,您必须在处理程序本身上调用close()
。另外,logger.getHandlers()
适用于contextDestroyed
方法:
for (Handler h : logger.getHandlers()) {
h.close();
}