性能打开和关闭文件处理程序?

时间:2014-08-13 18:15:26

标签: java java.util.logging filehandler

我有一个持久的事件驱动的HTTP上传程序(热文件夹),可以写入每个操作的日志。它会无限期地运行,直到用户决定关闭它。

为了确保在关闭应用程序时关闭日志,我在每次写入日志时编写了程序,它会打开日志文件,写入日志文件,然后关闭日志。

像这样:

fh = new FileHandler(logName, true);
fh.setFormatter(new MyCustomFormatter());
logger.addHandler(fh);
logger.info(message);
logger.removeHandler(fh);
fh.close();

最近,我考虑通过在上传作业的持续时间内打开日志来减少打开/关闭的次数(可能有数百次写入日志),然后在作业完成时关闭。

长话短说,我对此有多大的期望?是否有其他选项可确保应用程序在没有未关闭的日志文件的情况下关闭?

1 个答案:

答案 0 :(得分:1)

通过关闭FileHandler,您可能需要支付sync的费用。

如果在JVM关闭时将FileHandler连接到记录器,LogManager将关闭日志文件。如果从记录器中删除处理程序,则负责关闭它。如果在关闭之前您的记录器是garbage collected,则FileHandler不会关闭。这种类型的文件垃圾'可以通过更改代码来纠正。

如果您的JVM崩溃或者存在与关闭log / lck文件相关的I / O异常,那么您将看到遗留的lck文件和可能不包含您的格式化程序尾部字符串的日志文件。那种情况很少见,但是没有办法阻止它。您必须应用检测和正确的策略来摆脱这些情况。