Динамический мониторинг файла журнала - PullRequest
18 голосов
/ 03 октября 2011

Мне нужно отслеживать файл журнала для шаблона.Файл журнала постоянно записывается приложением.

  1. Приложение может добавлять новые операторы журнала, пока моя программа его читает.
  2. Журнал переворачивается, когда он> 200 МБ илив конце дня, поэтому моя программа должна динамически обрабатывать изменение имени файла.
  3. Если моя программа по какой-либо причине дает сбой, она должна возобновиться с того места, где остановилась.

Iне хочу заново изобретать колесо.Я ищу API Java.Я написал программу для чтения файла и поместил ее в цикл с 30-секундным сном, но он не соответствует всем критериям.

Ответы [ 4 ]

4 голосов
/ 03 октября 2011

Вы можете рассмотреть использование классов Apache Commons io, в частности классов Tailer / TailerListener. Смотри http://www.devdaily.com/java/jwarehouse/commons-io-2.0/src/main/java/org/apache/commons/io/input/Tailer.java.shtml.

2 голосов
/ 03 октября 2011

Если вы используете Log4j или можете интегрировать его, можно добавить выходные данные журнала к удобному объекту, такому как StringBuffer , как это обсуждалось в этом разделе. связанный вопрос: Настраиваемая регистрация для сбора сообщений во время выполнения

2 голосов
/ 03 октября 2011

Эти два API могут быть полезны:

1

JxFileWatcher (Официальный сайт)

Прочитайте здесь, на что он способен


2

Jnotify

JNotify - это библиотека java, которая позволяет приложению java прослушивать события файловой системы, такие как:

  • Файл создан

  • Файл изменен

  • Файл переименован

  • Файл удален

1 голос
/ 03 октября 2011

Это выглядит примерно так: Реализация Java Tail

По сути, вы используете BufferedReader. Отслеживание того, где вы остановились, будет чем-то, что вам нужно будет добавить, возможно, захватить последнюю прочитанную строку?

Тот же самый вопрос ссылается на JLogTailer , который выглядит интересным и может сделать большую часть того, что вы уже хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...