我需要一些工具来读取我的日志文件中的最新10分钟条目,如果记录了一些单词,则打印一些文本。
日志文件:
23.07.2014 09:22:11 INFO Logging.LogEvent 0 Failed login test@test.com
23.07.2014 09:29:02 INFO Logging.LogEvent 0 login test@test.com
23.07.2014 09:31:55 INFO Logging.LogEvent 0 login test@test.com
23.07.2014 09:44:14 INFO Logging.LogEvent 0 Failed login test@test.com
如果在最后10分钟内某些条目=失败-print ALARM。
我所做的就是找到'失败'匹配,但我不知道如何检查我的日志文件中的最后10分钟; / -any idea ??
from sys import argv
from datetime import datetime, timedelta
with open('log_test.log', 'r') as f:
for line in f:
try:
e = line.index("Failed")
except:
pass
else:
print(line)
答案 0 :(得分:0)
您的格式%d.%m.%Y
比%Y:%m:%d
更糟糕,可用于字符串比较。
我们也不知道log是否很大以及它是否已排序。如果它没有排序(对于多线程应用程序很常见),则必须分析每一行并将其转换为日期时间:
def get_dt_from_line(s):
return datetime.datetime.strptime(s[:20], '%d.%m.%Y %H:%M:%S')
然后将其用作过滤器(对于小文件):
MAX_CHECK_TIMEDELTA = datetime.timedelta(minutes=10)
LOG_START_ANALYZE_DATETIME = (datetime.datetime.today() - MAX_CHECK_TIMEDELTA)
lines = [s for s in TXT.split('\n') if 'Failed' in s and get_dt_from_line(s) >= LOG_START_ANALYZE_DATETIME]
print('\n'.join(lines))
对于大文件,您可以逐行读取文件。
如果您的日志文件只有一天,您可以使用字符串比较而不是日期时间比较:
LOG_START_ANALYZE_DATETIME = (datetime.datetime.today() - datetime.timedelta(minutes=10)).strftime('%d.%m.%Y %H:%M:%S')
lines = [s for s in TXT.split('\n') if 'Failed' in s and s >= LOG_START_ANALYZE_DATETIME]
答案 1 :(得分:-1)
如果我是你,我会逐行查找,获取第一行的时间戳然后迭代,直到第一个日期和当前日期之间的差异超过10分钟,同时计算出单词的出现次数&# 34;失败"
我认为你可以通过在空格之后拆分你的行来解决问题。但要小心,好像有一天,你的日志格式发生了变化,你的脚本可能也不会起作用。