Как анализировать файлы журналов с помощью регулярных выражений? альтернативы? - PullRequest
0 голосов
/ 23 сентября 2011

Я хочу проанализировать некоторые журналы для статистики использования.По сути, я хочу использовать regexp, чтобы облегчить боль при анализе

Итак, у меня есть текстовый файл с записями чего-то по этому

2011-09-17 09:16:33,531 INFO  [someJava.class.special] sendRequest: fromGevoName=null, ctrlPageId=fooBar, actionId=search,
2011-09-17 09:16:33,976 INFO  [someJavaB.class] fooBar
2011-09-17 09:16:33,982 DEBUG [someOtherJava.class] abc blabala
2011-09-17 09:16:33,987 INFO  [someJava.class.special] sendRequest completed: fromGevoName=XYZ, toPageId=fooBar, userId=someUser

.... Я хочу подсчитать вхождениявсех слов в позиции

[someJava.class.special] ctrlPageId=....

в данном случае fooBar и только в этом случае.Есть много разных fooBar, и я хочу посчитать, как часто они встречались.

Моя идея состояла в том, чтобы заменить подходящей группой и повторить что-то в этом

((?s).*\[someJava.class.special\] sendRequest: fromGevoname=.* ctrlPageId=([^,]*)(?-s).*)*

и заменить насоответствующая группа \2

Затем проанализируйте список в Excel.Но мой greptool не повторяет регулярное выражение, оно совпадает только один раз.Я использую grepWin, может быть, есть другой инструмент / регулярное выражение для этого?

Ну, в основном это была проблема wingrep или grepwin.Модификатор (? S), который включает переносы строк на точках или отключает его (? -S), не работает, если вы используете его несколько раз.Так что я обменял регулярное выражение на что-то вроде этого:

([\n-\[\(\]\.,:0-9a-zA-Z]).*\[someJava.class.special\] sendRequest: fromGevoname=.* ctrlPageId ([^,]*)(?-s).*

, поэтому я в основном поменял первую точку соответствия строк на все символы, которые могут встречаться в строке, включая разрывы строк.Это работает ... я уверен, что есть лучшее решение, всегда открытое для него

1 Ответ

1 голос
/ 23 сентября 2011

Я не уверен, что понимаю, но если вы ищете вывод:
someJava fooBar

Что-то вроде этого должно работать (скрипт php):

<?php
$log = file_get_contents('file.log')
preg_match_all("#\[(?<className>\w+)\.class(.special)?\](.*?)ctrlPageId=(?<controllerName>\w+)#i", $log, $m);

for ($i=0; $i < count($m[0]); $i++) {
  echo $m['className'][$i] . ' ' . $m['controllerName'][$i] . "\n";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...