java - 性能影响打开和关闭文件处理程序?

标签 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();

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

长话短说,我期望由此获得多少性能提升?是否有其他选项可以确保应用程序在没有未关闭的日志文件的情况下关闭?

最佳答案

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

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

如果您的 JVM 崩溃或存在与关闭 log/lck 文件相关的 I/O 异常,那么您将看到剩余的 lck 文件以及可能不包含格式化程序尾字符串的日志文件。这种情况很少见,但没有办法预防。您必须应用检测和纠正策略来消除这些情况。

关于java - 性能影响打开和关闭文件处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25293309/

相关文章:

java - 这种元素异常没有明显的原因

java - 单选按钮与右侧按钮和左侧文本对齐

java - Google App Engine - 配置默认记录器以发送电子邮件

Tomcat 控制台日志从我的应用程序获取输出

java - 我的循环不允许我输入用户输入来结束循环 :( (java)

java - 是否有任何 JavaFX gui 生成器?

java - 默认情况下如何将java Logger输出到文件

windows - 如何测试 STDIN 是否有可读取的内容(Windows 上的 Perl)

javascript - 将大小和名称传递给 JavaScript 的 FileHandler 的 .onload 事件

java - Java 8 中的 java.util.logging.FileHandler 损坏了吗?