Получить вывод консольного хвоста и сохранить в строку 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())
}
}