以前のファイルが削除され、新しいファイルに置き換えられた後も (永久に) テーリングを続けるログテーラーを実装しようとしています。したがって、サーバーを再起動するたびにこのプログラムを実行する必要はありません (ログが出力されます)。
これは私のコードです。
public void tail(String file) throws InterruptedException, IOException {
waitUntilFileExist(file);
File f = new File(file);
BufferedReader br = new BufferedReader(new FileReader(file.trim()));
br.skip(f.length());
String line = null;
while (f.exists()) {
f = new File(file);
line = br.readLine();
if (line == null) {
Thread.sleep(1000);
} else {
if (msl != null) {
//Send line to attached interface
msl.onMessage(line);
}
}
}
waitUntilFileExist(file);
tail(file);
}
public void waitUntilFileExist(String file) throws InterruptedException {
File f = new File(file);
if (!f.exists()) {
System.out.println("File doesn't exists");
Thread.sleep(1000);
waitUntilFileExist(file);
} else {
System.out.println("File does exists");
}
}
最初に、指定されたファイルが存在するかどうかを確認しますか? ファイルが存在する間、ファイルを読み取り、行を出力します。読み取り中にファイルが削除された場合、ファイルが再作成されるまで待機してから、tail メソッドを呼び出します。
Linuxボックスでこれをテストしましたが、正常に動作しますが、これが正しい方法であるかどうかはわかりません. これを行う別の方法はありますか?これは、数日や数か月などの本番環境で機能しますか?