Я пытаюсь сделать собственный 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()