Получить вывод консольного хвоста и сохранить в строку Java?

Я использую Apache Tailer для чтения конца строки, если есть добавление новой строки в файл журнала, программа напечатает только конец строки, это как "tail -f" из Linux, у меня есть выходной хвост для отправки с помощью String.

Могу ли я получить выходной хвост и сохранить в строку для моего кода ниже?

public class LogTailTest {

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

public static void main(String args[]) {

    TailerListener listener  = new ShowLinesListener();
    File file = new File("/home/ubuntu/Desktop/test.log");

    Tailer tailer = new Tailer(file, listener, 10000, true, true);
    tailer.run();

    try {
        Thread.sleep(1000);
    } catch(InterruptedException ex) {
        Thread.currentThread().interrupt();
    }
    tailer.stop();

}

}

Когда я запускаю вышеуказанную программу, она сразу выводится на консоль

1 ответ

Вы определяете, что делать каждый раз, когда ваша программа следит за новой строкой. Это поведение определено в дескрипторе метода класса ShowLinesListener:

@Override
public void handle(String line) {
    System.out.println(line);
}

Все, что вам нужно сделать, это изменить эту строку

System.out.println(line);

делать то, что вы хотите с этим. Поскольку вы уже используете библиотеку commons-io (именно здесь определены классы TailerListener и TailerListenerAdapter), вы можете использовать метод FileUtils.writeStringtoFile, чтобы записать содержимое строки, только что привязанной к другому файлу.

Ваш класс будет выглядеть так:

public class LogTailTest {

/**
* TailerListener implementation.
*/
static public class ShowLinesListener extends TailerListenerAdapter {
    @Override
    public void handle(String line) {
        FileUtils.writeStringtoFile(new File("/path/to/file"),
                                    line,
                                    Charset.defaultCharset())
    }
}
Другие вопросы по тегам