web-dev-qa-db-ja.com

Apache Commons IOテーラーの例

/var/log/auth.logファイルを読み取る監視プログラムに取り組んでいます。 Apache Commons IO Tailer クラスを使用してファイルをリアルタイムで読み取ります。開始するには、リアルタイムの読み取りをテストしたいと思いました。単純なファイルに分割し、コンソール行に手動でコードを入力します。私のコードは次のとおりです。

public class Main {
    public static void main(String[] args) {
        TailerListener listener = new MyListener();
        Tailer tailer = Tailer.create(new File("log.txt"), listener, 500);
        while(true) {

        }
    }
}

public class MyListener extends TailerListenerAdapter {
    @Override
    public void handle(String line) {
        System.out.println(line);
    }
}

そしてターミナルから:Sudo echo "Hello" >> log.txt問題は、ファイルに手動で何かを書き込もうとすると、コンソールに出力されないことです。 Tailerクラスの具体的な使用例を見つけようとしましたが、うまくいきませんでした。私はここで何が間違っているのですか?

15
user2435860

私のテストによると、Tailerは、ファイルに改行を追加した場合にのみ1行を出力します。だからSudo echo "Hello\n" >> log.txtを試してみてください

また、createを呼び出すと、スレッドが開始されますが、ハンドルがないことに注意してください。したがって、なぜwhile/trueループが必要だったのですか。

代わりにこれを試すことができます:

public static void main(String[] args) {
    TailerListener listener = new MyListener();
    Tailer tailer = new Tailer(new File("log.txt"), listener, 500);        
    tailer.run();
}
18
Duncan Jones

コードは機能するはずです。私にとって、これは期待どおりに機能します。

package de.lhorn.stackoverflowplayground;

import Java.io.File;
import org.Apache.commons.io.input.Tailer;
import org.Apache.commons.io.input.TailerListenerAdapter;

public class App {

    private static final int SLEEP = 500;

    public static void main(String[] args) throws Exception {
        App app = new App();
        app.run();
    }

    private void run() throws InterruptedException {
        MyListener listener = new MyListener();
        Tailer tailer = Tailer.create(new File("/tmp/log.txt"), listener, SLEEP);
        while (true) {
            Thread.sleep(SLEEP);
        }
    }

    public class MyListener extends TailerListenerAdapter {

        @Override
        public void handle(String line) {
            System.out.println(line);
        }

    }
}
1
user1907906

Tailer.createの使用:

public void tail(TailerListener listener) {

        File file = new File("log.txt")

        Tailer tailer = Tailer.create(file, listener, 500);
        tailer.run();
    }

http://apisonar.com/Java-examples/org.Apache.commons.io.input.Tailer.create.html

0
APISonar