анализ журнала Log4j за последние пять минут с использованием Python

#python #log4j

#python #log4j

Вопрос:

Я пытаюсь проанализировать журналы моего java-приложения (используя log4j), зарегистрированные за последние пять минут. Я планирую использовать Python для анализа журналов за последние пять минут, и если будут какие-либо предупреждения, отправьте мне электронное письмо.

Может ли кто-нибудь подсказать мне, каков наилучший метод получения строк журнала за последние пять минут?

Для этого я должен использовать python.

формат журнала следующий,

 2011-11-14 10:15:46 WARN : sample warning
2011-11-14 10:15:47 WARN : sample warning
2011-11-14 10:15:48 WARN : sample warning
2011-11-14 10:15:49 WARN : sample warning
  

Ответ №1:

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

 from datetime import datetime, timedelta
now = datetime.now()
lookback = timedelta(minutes=5)
oldest = (now - lookback).strftime('%Y-%m-%d %H:%M:%S')

lines = []

with open('logfile.log', 'r') as f:
    for line in f:
        if line[:19] > oldest:
            lines.append(line)

if lines:
    message = 'n'.join(lines)
    # send message per mail...
  

Комментарии:

1. Большое спасибо. Это помогло мне и решило мою проблему. Как вы думаете, хорошей идеей будет чтение с конца файла, чтобы сделать этот процесс эффективным?

2. Вы можете поиграть с f.seek(...) и найти подходящую позицию байта в файле, с которой вы хотите начать поиск. Зависит от размера файла и частоты обновления.

Ответ №2:

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

(предполагая, что вы хотите использовать log4j для записи в файл …) Хотя вы могли бы обрабатывать файловый ввод-вывод в своем коде на python, вероятно, проще использовать ‘tail’ для передачи файла в ваш скрипт. Очевидно, вам нужно будет спланировать, как вы справляетесь с вращающимися файлами журнала — предположительно, у вас уже есть какой-то механизм для этого — ему нужно указать, чтобы код python повторно открывал свои дескрипторы файлов после вращения.

Возможно, было бы намного проще отправить данные в ваш скрипт на python с помощью канала — и позволить python обрабатывать вращение.

В любом случае, не забудьте добавить SIGALRM для принудительной проверки события при отсутствии каких-либо сообщений журнала.

Комментарии:

1. Изначально я также думал о постоянно работающей программе. Но у меня плохой опыт постоянного запуска сценариев оболочки в течение длительного времени. Потому что через некоторое время они будут зависать. При этом я планирую запускать программу раз в пять минут и помещать это в cron. Спасибо, что упомянули о SIGALARM. Поскольку я новичок в Python, я раньше не использовал SIGALARMS. Спасибо за ваши идеи.