【发布时间】:2013-01-30 17:59:28
【问题描述】:
我想在 Java 应用程序中“拖尾 -f”很多日志文件。
我已经通过监视大小和上次更新并在文件大小或上次更新时间发生变化时重复打开文件并读取最后几个字节来实现此功能 - 然后立即关闭它。
这似乎有问题,因为当记录器决定重命名文件时我可能会打开它,这会导致某种问题。
我还想用一种比注意到文件大小减小的机制更可靠地检测“滚动”文件......似乎容易出错但不太可能。
由于我似乎无法访问文件描述符或其他低级文件实用程序,因此我可能无法重现 tail 的行为——但是在不“锁定”文件进行重命名的情况下读取文件是否有任何技巧/删除(Windows 7)
我想另一种可能性是实际产生一个 tail -f 进程并读取进程输出,但这似乎有点重——我在这里扫描了 60 个日志文件,其中一些有很多输出(大多数将是闲置)。
【问题讨论】:
-
如果您使用的是 JDK 7,您可以使用
java.nio.file.WatchService.poll()轮询文件。 -
课堂真整洁!我认为这将解决检测截断的问题,但我仍然有必须打开文件并阅读文本的问题(尽管它也可能让我这样做......我将不得不更仔细地查看)。谢谢
-
我失去了你。哪个操作系统?Windows 还是 Linux?
-
Windows 7,也许我在 git 中使用“Tail”这一事实让你失望了?