2012-03-08 104 views
2

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

</log> 

自己在一条线上。

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

我可以做些什么来保持getTail()不起作用?

+0

也许一个不同的问题会帮助我找到问题的根源。什么进程关闭物理日志文件?换句话说,当一个日志文件通常关闭以便我不必删除锁定文件并添加标记? – 2012-03-08 22:13:49

回答

0

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

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

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

0

如果你愿意,你可以强制关闭这样的:

FileHandler fileHandler = (FileHandler) yourLogger.getHandlers()[0]; 
fileHandler.flush(); 
fileHandler.close(); 

我假设第一个处理程序存在,它是一个文件处理程序。这是你管理这种情况。