我需要一些工具来读取我的日志文件中最新的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报警。
我所做的就是查找“失败的”匹配,但是我不知道如何在我的日志文件中检查最近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)发布于 2014-07-24 20:04:40
您的格式%d.%m.%Y比可用于字符串比较的%Y:%m:%d更差。
我们也不知道log是否很大,以及它是否被排序。如果没有排序(这在多线程应用程序中很常见),则必须分析每一行并将其转换为datetime:
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]发布于 2014-07-24 19:48:14
如果我是你,我会逐行查找,获取第一行的时间戳,然后迭代,直到第一个日期与当前日期之间的差异超过10分钟,同时计算单词"Failed“的出现次数。
我认为您可以通过在空格后面拆分行来解决问题。但是要小心,如果有一天,你的日志格式改变了,你的脚本可能也不会工作。
https://stackoverflow.com/questions/24932730
复制相似问题