Шаблон регулярного выражения для журнала Java - PullRequest
1 голос
/ 08 мая 2020

Я пытаюсь использовать плагин парсера регулярных выражений в fluentd для индексации журналов моего приложения.

Вот его фрагмент.

2020-05-06T22:34:50.860-0700 - WARN [main] o.s.b.GenericTypeAwarePropertyDescriptor: Invalid JavaBean property 'pipeline' being accessed! Ambiguous write methods found next to actually used [public void com.theoaal.module.pipeline.mbean.DynamicPhaseExecutionConfigurationMBeanBuilder.setPipeline(com.theplatform.module.pipeline.DynamicPipeline)]: [public void com.theplatform.module.pipeline.mbean.PhaseExecutionConfigurationMBeanBuilder.setPipeline(com.theoaal.module.pipeline.Pipeline)]

I использовали regex101.com для сопоставления с шаблоном регулярного выражения, и я не могу найти совпадение.

^(?<date>\d{4}\-\d{2}\-\d{2})(?<timestamp>[A-Z][a-z]{1}\d{2}:\d{2}:\d{2}.\d{3}\-\d{4})\s\-\s(?<loglevel>\[\w\]{6})\s+(?<class>\[[A-Z][a-z]+\])\s(?<message>.*)$

Пожалуйста, помогите. Спасибо

1 Ответ

1 голос
/ 08 мая 2020

Вы можете использовать

^(?<date>\d{4}-\d{2}-\d{2})[A-Z](?<timestamp>\d{2}:\d{2}:\d{2}\.\d{3}-\d{4})\s+-\s+(?<loglevel>\w+)\s+(?<class>\[\w+\])\s+(?<message>.*)

См. демонстрацию регулярных выражений

Обратите внимание, что в вашем шаблоне \[\w\]{6} соответствует только [, одно слово char и шесть ] символов. В шаблоне временной метки [A-Z][a-z]{1} требует двух букв, но tere - это одна T. Для вашего шаблона «класс» требуется слово с заглавной буквы и [A-Z][a-z]+, но main - все в нижнем регистре. Вы избегаете - вне классов символов без необходимости, и вам не удалось избежать буквальной точки в шаблоне.

Подробности

  • ^ - начало строки
  • (?<date>\d{4}-\d{2}-\d{2}) - дата: 4 цифры, -, 2 цифры, -, 2 цифры
  • [A-Z] - заглавная буква ASCII
  • (?<timestamp>\d{2}:\d{2}:\d{2}\.\d{3}-\d{4}) - 2 цифры, :, 2 цифры, :, 2 цифры, ., 3 цифры, - и 4 цифры
  • \s+-\s+ - -, заключенные в 1 + пробелы
  • (?<loglevel>\w+) - 1+ символов слова
  • \s+ - 1+ пробелов
  • (?<class>\[\w+\]) - [, 1+ символов слова, ]
  • \s+ - 1+ пробелов
  • (?<message>.*) - разрешение строки.

Скопируйте и вставьте в fluent.conf или td-agent.conf :

<source>
  type tail
  path /var/log/foo/bar.log
  pos_file /var/log/td-agent/foo-bar.log.pos
  tag foo.bar
  format /^(?<date>\d{4}-\d{2}-\d{2})[A-Z](?<timestamp>\d{2}:\d{2}:\d{2}\.\d{3}-\d{4})\s+-\s+(?<loglevel>\w+)\s+(?<class>\[\w+\])\s+(?<message>.*)/
</source>

Тест :

enter image description here

...