java - 如何在将要翻转的 Windows 中读取日志文件?

标签 java logging nio

在 Linux 中,当您打开文件的输入流时,另一个进程可以重命名该文件。因此,当文件滚动时,您仍然可以从流中读取。在 Windows 中,当您打开输入流时,在输入流关闭之前无法重命名该文件。如何在不影响“重命名”过程的情况下读取文件?

我试过使用 java.nio.FileChannel。它适用于不同进程同时读取和写入文件(例如 Java 进程读取和记事本写入),但不适用于重命名文件(例如 Java 进程读取但重命名命令不起作用)。

最佳答案

最简单的解决方案如下(我只是从我的一条评论中复制)

在您阅读完新添加的行后关闭阅读器,这样尝试进行轮换的其他进程就会成功。但是执行日志轮换的进程必须尝试多次,直到它发现没有其他进程正在从它读取。

apache commons IO Tailer可以做到这一点。

关于java - 如何在将要翻转的 Windows 中读取日志文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15140245/

相关文章:

java - Java中的正则表达式问题

java - 我怎样才能通过java找到jboss将把我的服务器日志放在哪里?

python - 如何 pickle 记录器?

java - Google map 和 java.lang.SecurityException

java - 无法通过 azure 管道检索下载的文件

java - 使使用泛型的类的方法能够返回其自身及其子类实例

php - 通过带有客户端身份验证的 SSL 进行 curl

Android 中带有选择器的 Java TCP 服务器 NIO

Java 7 新的 IO API - Paths.exists

java - RandomAccessFile 与 FileChannel.open(path);