Смотрите журналы в папке в режиме реального времени с Python - PullRequest
0 голосов
/ 04 апреля 2019

Я пытаюсь сделать собственный logwatcher для папки журнала, используя python. Цель проста - найти регулярное выражение в журналах и написать строку в тексте, если найдете его.

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

Я сделал что-то вроде tail -f (копирование части кода) в python, который постоянно читает определенный файл журнала и записывает строку в текстовый файл, если в нем найдено регулярное выражение, но я не знаю, как Могу ли я сделать это с папкой вместо одного файла журнала, и как скрипт может обнаружить создание новых файлов журнала внутри папки, чтобы читать их на лету.

#!/usr/bin/env python

import time, os, re
from datetime import datetime

# Regex used to match relevant loglines
error_regex = re.compile(r"ERROR:")
start_regex = re.compile(r"INFO: Service started:")

# Output file, where the matched loglines will be copied to
output_filename = os.path.normpath("log/script-log.txt")

# Function that will work as tail -f for python
def follow(thefile):
    thefile.seek(0,2)
    while True:
        line = thefile.readline()
        if not line:
            time.sleep(0.1)
            continue
        yield line


logfile = open("log/service.log")
loglines = follow(logfile)
counter = 0

for line in loglines:
    if (error_regex.search(line)):
        counter += 1
        sttime = datetime.now().strftime('%Y%m%d_%H:%M:%S - ')
        out_file=open(output_filename, "a")
        out_file.write(sttime + line)
        out_file.close()
    if (start_regex.search(line)):
        sttime = datetime.now().strftime('%Y%m%d_%H:%M:%S - ')
        out_file=open(output_filename, "a")
        out_file.write(sttime + "SERVICE STARTED\n" + sttime + "Number of errors detected during the startup = {}\n".format(counter))
        counter = 0
        out_file.close()

1 Ответ

0 голосов
/ 04 апреля 2019

Вы можете использовать сторожевой таймер для этой цели. Это тоже может быть комментарий, но не уверен, что он заслуживает ответа.

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