Нам необходимо проанализировать несколько файлов журнала и запустить некоторую статистику по найденным записям журналов (таким как количество появлений определенных сообщений, пики появления и т. Д.). Проблема заключается в написании синтаксического анализатора журналов, который будет обрабатывать несколько форматов журналов и позволит мне добавить новый формат журналов без особых усилий.
Чтобы упростить ситуацию, я смотрю только журналы, которые в основном будут выглядеть примерно так:
[11/17/11 14:07:14:030 EST] MyXmlParser E Premature end of file
, поэтому каждая запись в журнале будет содержать timestamp
, originator
(из сообщения журнала), level
и log message
. Одна важная деталь заключается в том, что сообщение может иметь более одной строки (например, трассировка стека).
Другой экземпляр записи журнала может быть:
17-11-2011 14:07:14 ERROR MyXmlParser - Premature end of file
Я ищу хороший способ указать формат журнала, а также наиболее подходящую технологию для реализации парсера для него.
Я думаю о регулярных выражениях, но думаю, что будет сложно справиться с такими ситуациями, как многострочное сообщение (например, stacktrace).
На самом деле задача написания парсера для определенного формата журнала сама по себе не так проста, когда я рассматриваю возможность многострочных сообщений. Как вы разбираете эти файлы?
В идеале я бы мог указать что-то вроде этого в формате журнала:
[%TIMESTAMP] %ORIGIN %LEVEL %MESSAGE
или
%TIMESTAMP %LEVEL %ORIGIN - %MESSAGE
Очевидно, мне нужно было бы назначить правильный преобразователь для каждого поля, чтобы оно обрабатывало его правильно (например, отметку времени).
Кто-нибудь может дать мне несколько хороших идей о том, как реализовать это надежным и модульным способом (я использую Java)?