java.util.logging.XMLFormatter中有一个名为getTail()的方法,它写入物理日志文件的最后一行。它只是写
</log>
单独在一条线上。
是否有人知道如何/何时调用getTail()?我从来没有在我自己的代码中调用它,它始终写入最后一行。现在,突然之间,事实并非如此。我显然已经破坏了一些东西,但是如果我能想到我做了什么或者如何解决这个问题,我就知道了。我的日志文件已写入,但我无法打开它。一个似乎是锁的伴随文件可以确保这一点。 (如果日志文件名是Fuzz.log.xml,则另一个文件将被称为Fuzz.log.xml.lck,其文件大小为0.如果我删除该文件,我可以再次编辑我的日志文件,它很好,除了它缺少最终的日志标记。)我只想让日志代码再次为我写这个标签,以便我可以打开日志而不删除锁定文件并手动添加磁贴。
我可以做些什么让getTail()无法工作?
答案 0 :(得分:0)
通常我希望JDK Logging Framework负责流处理。如果查看调用“getTail()”的位置,您会看到它是作为StreamHandler.flushAndClose()的一部分调用的,这主要是从StreamHandler.close()调用的。
因此,只要正确关闭日志记录功能的流,即应用程序正常终止时,就会写入尾部。如果应用程序崩溃或被杀死,则可能无法正确关闭文件。
查看这些内容的最佳方法可能是使用Eclipse并确保JDK Source在“Java - &gt; Installed JREs”下的Preferences中可用,然后您可以使用所有Eclipse浏览功能查看内容已连接。
答案 1 :(得分:0)
如果你想要,你可以强迫关闭:
FileHandler fileHandler = (FileHandler) yourLogger.getHandlers()[0];
fileHandler.flush();
fileHandler.close();
我假设存在第一个处理程序,它是一个文件处理程序。这是你管理这种情况。