Python - 从日志文件中读取10分钟

时间:2014-07-24 11:43:05

标签: python logging

我需要一些工具来读取我的日志文件中的最新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)

2 个答案:

答案 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;失败"

我认为你可以通过在空格之后拆分你的行来解决问题。但要小心,好像有一天,你的日志格式发生了变化,你的脚本可能也不会起作用。