我正在尝试使用python创建日志文件夹的自定义日志监视程序。目的很简单,在日志中找到一个正则表达式,如果找到则在文本中写一行。
问题在于该脚本必须针对一个文件夹不断运行,在该文件夹中可能有多个名称未知的日志文件,而不是一个,并且它应该动态检测该文件夹内新日志文件的创建。 / p>
我在python中做了某种类型的tail -f(复制代码的一部分),如果发现了regex,它会不断读取特定的日志文件,并在txt文件中写一行,但是我不知道如何我可以使用一个文件夹而不是一个日志文件来执行此操作吗?该脚本如何检测该文件夹内新日志文件的创建以即时读取它们。
#!/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()