1

以前のファイルが削除され、新しいファイルに置き換えられた後も (永久に) テーリングを続けるログテーラーを実装しようとしています。したがって、サーバーを再起動するたびにこのプログラムを実行する必要はありません (ログが出力されます)。

これは私のコードです。

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ボックスでこれをテストしましたが、正常に動作しますが、これが正しい方法であるかどうかはわかりません. これを行う別の方法はありますか?これは、数日や数か月などの本番環境で機能しますか?

4

1 に答える 1