【发布时间】:2015-07-23 08:21:53
【问题描述】:
我有一个使用 jetty 作为 Web 服务器的 Java 控制台应用程序,该应用程序将一直运行,直到用户关闭控制台窗口(在 Windows 操作系统上,它是运行 java -jar xxx.jar 命令的 cmd 窗口)
public static void main(String[] args) {
Server server = new Server();
// some code to config server
try {
server.start();
server.join();
} catch (Throwable t) {
t.printStackTrace(System.err);
}
}
我还使用 java 日志将日志类实现为单例,因此我可以使用它来记录应用程序中的任何事件。
问题是,我使用java.util.logging.FileHandler 作为日志文件处理程序
FileHandler fileHandler = new FileHandler(".\testlog.log");
fileHandler.setLevel(Level.INFO);
logger.addHandler(fileHandler);
每当我运行应用程序时,都会与日志文件一起创建一个testlog.log.lck 文件,并且在应用程序停止后不会消失。
我知道这个.lck 文件应该在文件处理程序关闭后消失,但我不知道我应该何时何地关闭fileHandler,因为我的应用程序不知道它何时会关闭被用户终止。
我尝试了Runtime.getRuntime().addShutdownHook(),但没有运气,我认为 addShutdownHook 调用得太晚以至于记录器对象已经被销毁。
谁能给我一些关于如何处理剩余的.lck 文件和日志的想法,或者我应该在哪里调用fileHandler.close()?
【问题讨论】:
标签: java logging jetty filehandle