gpt4 book ai didi

java - 如何在不打开文件的情况下像 "Tail -f"那样在 Java 中跟踪文件(防止重命名/删除)

转载 作者:搜寻专家 更新时间:2023-10-30 19:43:41 26 4
gpt4 key购买 nike

我想从 Java 应用程序中“Tail -f”很多日志文件。

我通过监控大小和上次更新并在文件大小或上次更新时间发生变化时重复打开文件并读取最后几个字节来实现这一点——然后立即关闭它。

这似乎有问题,因为当记录器决定重命名文件时我可能会打开它,这会导致某种问题。

我还想用一种机制检测“滚动”文件,而不是注意到文件大小减小……似乎容易出错,但不太可能。

因为我似乎无法访问文件描述符或其他低级文件实用程序,所以我可能无法重现 tail 的行为——但是是否有任何技巧可以在不“锁定”文件以重命名的情况下读取文件/删除(Windows 7)

我想另一种可能性是实际生成一个 tail -f 进程并读取进程输出,但这似乎有点沉重——我在这里扫描了大约 60 个日志文件,其中一些有很多输出(大多数是空闲)。

最佳答案

Apache Commons 有一个 Tailer class ,那会做你想要的吗?如果可以的话,它具有滚动检测机制以及读取内容,因此您将获得所需的一切。

如果那做不到,可能是没有办法用纯 java 做。您需要一些帮助,例如 C 代码,将 fopen 与 SH_DENYNO 一起使用允许在 Windows 上共享打开的参数。或者然后通过 executing a system command 调用尾部实现.

但由于打开日志文件的代码是导致锁定文件的代码,即使那样也可能无济于事。在那种情况下,唯一真正的选择是更改日志记录的工作方式,因为这是锁定文件的罪魁祸首。 Log4j 可以使用 SocketAppender ,等等。

关于java - 如何在不打开文件的情况下像 "Tail -f"那样在 Java 中跟踪文件(防止重命名/删除),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14610621/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com