ファイルを監視していて、このファイルのコンテンツと新しいファイルを含む新しいファイルを取得する必要があるため、ファイルがいつ回転したかを知りたいです。Java6 を使用する必要があるため、JDK7 の新機能はありません。
問題は、(ファイルへの参照を保持して) ファイルをローテーションすると、古い参照が更新され、古いファイルを指すようにしたいということです。
私はこのようなことをしていました:
if (reader == null) {
reader = new RandomAccessFile(toWatch, "r");
}
System.out.println("LasModified:" + new Date(toWatch.lastModified()));
System.out.println("Cuando se creo to Watch long:" + reader.length()); --> lenght is okay.
//Here, I use logrotate to simulate what it could happen. (I execute the code in debug mode to be able to do it
long len = 0L;
File f = new File("/home/gortiz/logRotate/test.flume");
System.out.println("LasModified NewReader:" + new Date(f.lastModified()));
RandomAccessFile newReader = new RandomAccessFile(toWatch, "r");
len = reader.length(); --> len = 0
long newLength = newReader.length(); --> newLenght = 0
name.1 のファイルがあるかどうかを確認できました。通常、ログシステムはログの名前をそのように変更します..しかし、ログシステムがファイルの名前を変更したり、別のディレクトリに移動したりすると、それが起こることを誰も保証しないため、これは良い解決策ではありません.