我的程序(服务器)有一个记录器,它是主服务器类的一个属性,所有其他类都使用它来记录错误。有没有办法在程序终止时删除.lck文件?我的代码:
private static Logger log = Logger.getLogger("ServerLog");
public Server() {
// initialize variables
try {
FileHandler fh = new FileHandler(
"src/main/resources/log/ServerLog.log", true);
log.addHandler(fh);
log.setLevel(Level.ALL);
fh.setFormatter(new SimpleFormatter());
} catch (SecurityException e) {
getLog().log(Level.WARNING, e.getMessage());
} catch (IOException e) {
getLog().log(Level.WARNING, e.getMessage());
}
}
其他类调用它来记录错误。
第二个问题:当我写一个文件时:
public final void saveRanking() {
try {
FileOutputStream fos = new FileOutputStream(
"src/main/resources/database/dataRanking.out");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(getRanking());
oos.flush();
oos.close();
fos.close();
} catch (FileNotFoundException e) {
getLog().log(Level.SEVERE, e.getMessage());
} catch (IOException e) {
getLog().log(Level.SEVERE, e.getMessage());
}
}
有没有办法确保文件保存没有问题,即使进程在写入期间终止?
答案 0 :(得分:0)
如果您的代码在关闭时删除了FileHandler,请确保在删除后关闭FileHandler。 FileHandler打开时,您应该会看到锁定文件。如果在VM退出后看到它们停留,那么这是因为FileHandler未关闭,VM在处理程序关闭挂钩运行时停止或崩溃,或者在尝试删除它时发生了I / O异常。 / p>
你可能遇到JDK-6774110 lock file is not deleted when child logger is used.没有对此进行评估,但我认为当记录器被垃圾收集时可能会发生这种情况。见JDK-6274920: JDK logger holds strong reference to java.util.logging.Logger instances.