Apache Commons IO Tailer示例

我正在研究一个读取/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类的具体例子,但没有运气。 我在这做错了什么?

根据我的测试, 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(); } 

你的代码应该有效。 对我来说,这确实有效。

 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); } } }