Найти правильные регулярные выражения для агрегирования журналов? - PullRequest
0 голосов
/ 10 февраля 2019

Я хочу найти все журналы с «похожим» сообщением об ошибке и подсчитать количество экземпляров каждого типа.Проблема в том, что часто есть какая-то динамическая часть сообщения об ошибке.

Например, с учетом таких сообщений об ошибке, как

"Didn't accept value 3 for parameter foo"
"Didn't accept value 6 for parameter bar"
"Could not open file 'my_file.json' because: it does not exist"
"Could not open file 'my_other_file.json' because: it is not 
formatted correctly"

Я хотел бы иметь возможность подсчитывать эти случаи в журнале, чтобыВ итоге я получаю вывод:

"Didn't accept value * for parameter *" -- 2 counts
"Could not open file * because: it does not exist" -- 2 counts

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

Есть ли какой-нибудь способ обнаружить, когда в журналах есть какая-то динамическая часть,и объединить их?

1 Ответ

0 голосов
/ 10 февраля 2019

ты имеешь в виду что-то подобное?

import re

logs = [
    "Didn't accept value 3 for parameter foo",
    "Didn't accept value 6 for parameter bar",
    "Could not open file 'my_file.json' because: it does not exist",
    "Could not open file 'my_other_file.json' because: it is not formatted correctly",
]

counts = {
    "Didn't accept value * for parameter *": 0,
    "Could not open file * because: *": 0
}

for log in logs:
    s = re.search(r"Didn't accept value \d+ for parameter \w+", log)
    if s:
        counts["Didn't accept value * for parameter *"] += 1
        continue
    s = re.search(r"Could not open file '[^']+' because: \w+", log)
    if s:
        counts["Could not open file * because: *"] += 1
        continue

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