Хвост файла не работает с помощью TailerListenerAdapter от Apache Commons io

Я хочу, чтобы хвост файла содержимого с помощью Java. Я пытался использовать Tailer и TailerListenerAdapter Apache Commons IO. Я включил storm-core-1.1.1.jar в classpath для требуемых зависимостей. Программа компилируется и запускается; Но метод 'handle' в TailerListenerAdapter вообще не вызывается, и выполнение застревает внутри основного метода. Ниже приведен код:

import org.apache.storm.shade.org.apache.commons.io.input.TailerListenerAdapter;
import org.apache.storm.shade.org.apache.commons.io.input.Tailer;
import org.apache.storm.shade.org.apache.commons.io.input.TailerListener;

import java.io.File;
public class LogTailTest {

    /**
     * TailerListener implementation.
     */
    static public class ShowLinesListener extends TailerListenerAdapter {
        @Override
        public void handle(String line) {
            System.out.println(line);
            System.out.println("inside handle");
        }
    }

    public static void main(String args[]) {


        TailerListener listener  = new ShowLinesListener();
        File file = new File("C:/LogFiles/Radius-log");
        System.out.println("inside main");
        Tailer tailer = Tailer.create(file, listener);
        tailer.run();

       }
}

2 ответа

Вы не должны вызывать "tailer.run()" напрямую. Вместо этого сделайте:

TailerListener listener  = new ShowLinesListener();
File file = new File("C:/LogFiles/Radius-log");
System.out.println("inside main");
Tailer tailer = Tailer.create(file, listener);
Thread thread = new Thread(tailer);
thread.setDaemon(true); // optional
thread.start();

Если выполнение остается в методе main, то это по крайней мере означает, что оно не завершилось сбоем. Вы можете получить дальнейшее понимание того, что происходит, применяя другие методы TailerListener интерфейс в вашем шоу ShowLinesListener, Существуют методы для обработки отсутствия файла, ротации файлов, общих исключений и т. Д.

Другие вопросы по тегам