我想在Java应用程序内部"tail -f"很多日志文件。
我已经通过监视文件大小和最后更新时间,并在文件大小或最后更新时间更改时重复打开文件并读取最后几个字节来使其工作--然后立即关闭它。这似乎存在问题,因为当记录器决定重命名文件时,我可能会一直保持它处于打开状态,这将导致某种问题。
我还希望检测到一个“Rolled”文件的机制比注意到文件大小减小更可靠...这似乎容易出错但不太可能发生。
由于我似乎无法访问文件描述符或其他低级文件实用程序,因此我可能无法重现tail的行为--但是否有任何技巧可以在不“锁定”文件以进行重命名/删除(Windows 7)的情况下读取文件?
我想另一种可能性是实际上产生一个tail -f进程并读取进程输出,但这似乎有点麻烦--我正在扫描大约60个日志文件,其中一些具有大量输出(大多数将处于空闲状态)。
java.nio.file.WatchService.poll()
来轮询文件。 - Buhake Sindi