Apache Commons IO Tailer 示例

2022-09-03 06:28:36

我正在开发一个监视程序,该程序读取/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);
    }
}

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


答案 1

根据我的测试,只有在向文件添加换行符后才会打印一行。所以试试Tailersudo echo "Hello\n" >> log.txt

另请注意,如果调用 ,则启动一个线程,但没有对它的处理。因此,为什么你必须有一段时间/真正的循环。create

你可以试试这个:

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

答案 2

您的代码应该可以正常工作。对我来说,这确实按预期工作。

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

    }
}

推荐