Apache Commons IO Tailer示例

use*_*860 14 java 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

从终端:sudo echo "Hello" >> log.txt 问题是当我尝试在文件中手动编写某些东西时,它不会在控制台中打印它.我试图找到一个使用Tailer类的具体例子,但没有运气.我在这做错了什么?

Dun*_*nes 18

根据我的测试,Tailer只有在为文件添加换行符时才会打印一行.所以试试吧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();
}
Run Code Online (Sandbox Code Playgroud)

  • @ user2435860我猜这是因为你还有`Tailer tailer = Tailer.create`而不是'Tailer tailer = new Tailer`?这个错误会导致你运行两个线程,每个线程都打印到stdout. (4认同)
  • 好的,所以我已经完成了你所说的,而且它正在发挥作用.但有一点,我打印输出两次.例如,如果我尝试在终端echo"Hello">> log.txt中写入,它将在控制台中两次打印"Hello".这是为什么? (2认同)