【发布时间】:2014-08-14 03:32:08
【问题描述】:
我有一个持久的事件驱动的 HTTP 上传程序(热文件夹),它会在每个操作上写入日志。它会无限期地运行,直到用户决定关闭它。
为了确保在应用程序关闭时关闭日志,我编写了这样的程序,每次写入日志时,它都会打开日志文件,写入,然后关闭日志。
像这样:
fh = new FileHandler(logName, true);
fh.setFormatter(new MyCustomFormatter());
logger.addHandler(fh);
logger.info(message);
logger.removeHandler(fh);
fh.close();
最近,我考虑通过在上传作业期间打开日志(可能有数百次写入日志)然后在作业完成时关闭来减少打开/关闭次数。
长话短说,我期望从中获得多少性能提升?是否有其他选项可以确保应用程序在没有未关闭的日志文件的情况下关闭?
【问题讨论】:
-
似乎应该很容易测试这个......
-
假设您正在使用 java.util.log 工具,jdk 已经内置支持在 jvm 关闭时关闭它们。
-
这个内置支持是什么?如果我关闭应用程序,文件应该自动关闭吗?那不是我的经验。当我关闭程序时,我不得不调用 fh.close() 以确保 .lck 文件消失。你是对的,我可以测试它。只是想对此发表意见。谢谢@jtahlborn
-
没关系,我明白你在说什么。关机挂钩。我有这种方式,但它只在预期的关闭时运行。如果用户强制关闭程序怎么办? @jtahlborn
-
如果用户强制关闭程序,那么您将丢失任何缓冲输出(操作系统仍会为您关闭文件)。与大多数编程一样,您必须平衡性能需求和可靠性需求。
标签: java java.util.logging filehandler