我正在研究一个读取/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类的具体例子,但没有运气。我在这里做错了什么?
答案 0 :(得分:16)
根据我的测试,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();
}
答案 1 :(得分:1)
您的代码应该有效。对我来说,这确实有效。
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);
}
}
}
答案 2 :(得分:0)
使用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