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/