Если бы это зависело от меня, я бы использовал python и регулярные выражения.Отказ от ответственности: я никогда не использовал python в том масштабе, о котором вы говорите.
Вот первые два элемента из вашего примера вывода, переписанные в регулярных выражениях:
- r "Загрузка страницы \ w + .php клиентом [. \ d] + не удалась из-за ошибки \ d +"
- r "Подключение к [. \ d] + порту \ d + тайм-аут клиента [. \ d] + исходный порт \ d + "
Не так уж и плохо, верно?Вы можете использовать их в качестве «ключей» для ваших корзин верхнего уровня.
Тогда ваш код для сопоставления заданной строки (строк) с корзиной станет невероятно простым:
for bucket in buckets:
if re.match(bucket.regex, s):
bucket.matchingStrings.append(s)
break
# else if no buckets match, generate a new bucket/regex for s
Созданиеэти регулярные выражения будут хитрой частью.Вы должны иметь правила для выбора частей строки, которые должны быть обобщены.В вашем случае общие части кажутся числами, IP-адресами и именами файлов.Вам нужно будет придумать правильные выражения для каждого сценария, но вот простая замена, которая заменяет числа в строке шаблоном регулярного выражения, представляющим число.
pattern = r"\d+"
re.sub(pattern, pattern, "Failed to count from 0 to 600")
# returns r"Failed to count from \d+ to \d+"
Могу поспорить, что вы получите довольно далекос заменой \ d + и ничего более.