java - XMLFormatter 中的 getTail() 方法如何工作?

标签 java java.util.logging

java.util.logging.XMLFormatter 中有一个名为 getTail() 的方法,它会写入物理日志文件的最后一行。它只是写

</log> 

单独一行。

有谁知道如何/何时调用 getTail()?我从来没有在自己的代码中调用它,而且它总是写最后一行。现在,突然之间,不是了。我显然已经破坏了一些东西,但如果我能想到我做了什么或如何解决这个问题,我就该死了。我的日志文件已写入,但无法打开。一个似乎是锁的伴随文件确保了这一点。 (如果日志文件名为 Fuzz.log.xml,则另一个文件将称为 Fuzz.log.xml.lck,文件大小为 0。如果删除该文件,我可以再次编辑我的日志文件,这很好,除了它缺少最后的日志标签。)我只希望日志记录代码再次为我编写该标签,这样我就可以打开日志而无需删除锁定文件并手动添加磁贴。

我可以做什么愚蠢的事情来阻止 getTail() 工作?

最佳答案

通常我希望 JDK 日志记录框架负责流处理。如果您查看“getTail()”的调用位置,您会发现它是作为 StreamHandler.flushAndClose() 的一部分被调用的,这主要是从 StreamHandler.close() 调用的。

因此,只要日志功能的流正确关闭,即应用程序正常终止时,就会写入尾部。如果应用程序崩溃或终止,它可能没有机会正确关闭文件。

查看这些东西的最佳方法可能是使用 Eclipse 并确保 JDK 源在“Java -> Installed JREs”下的首选项中可用,然后您可以使用所有 Eclipse 浏览功能来查看东西在哪里已连接。

关于java - XMLFormatter 中的 getTail() 方法如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9623932/

相关文章:

java - JComponents 没有显示图片背景?

java - 为什么 Slick2d 点不与矩形相交?

java - 如何使用 JDK Logging 手动滚动日志文件

tomcat - 在tomcat下指定自定义logging.properties

java - 抽象数据类型和接口(interface)

java - 在 JCraft JSch 中共享私钥安全吗

java - java.util.logging.Logger 在哪里存储他们的日志

java - 如何在使用 java logging API 时禁用默认控制台处理程序?

java - 防止 Tomcat 日志记录转到 stderr?

java - 我如何循环 JSON 对象的响应?