使用Python分析Log4j日志的最后五分钟

1 投票
2 回答
2091 浏览
提问于 2025-04-17 06:17

我正在尝试分析我的Java应用程序日志(使用log4j),想要查看最近五分钟内的日志。我打算用Python来分析这段时间的日志,如果发现有任何警告,就要给我发邮件。

有没有人能告诉我,获取最近五分钟日志的最佳方法是什么?

我必须使用Python来完成这个任务。

日志格式如下:

2011-11-14 10:15:46 WARN : sample warning
2011-11-14 10:15:47 WARN : sample warning
2011-11-14 10:15:48 WARN : sample warning
2011-11-14 10:15:49 WARN : sample warning

2 个回答

0

分析“最后5分钟”的数据其实没什么意义。如果是我,我会让程序一直运行,然后把发出的警报限制在每5分钟一次。

(假设你想继续使用log4j写入文件……)虽然你可以在Python代码中处理文件的读写,但用'tail'命令把文件内容传给你的脚本可能更简单。显然,你需要考虑如何处理日志文件的轮换——你应该已经有某种机制来处理这个问题——需要告诉Python代码在文件轮换后重新打开文件。

用管道把数据发送到你的Python脚本可能会简单很多——让Python来处理轮换

无论如何,别忘了添加一个SIGALRM,这样在没有日志消息的情况下也能强制进行检查。

2

因为你的日志文件是按时间顺序排列的,所以你需要把它完全解析一遍:

from datetime import datetime, timedelta
now = datetime.now()
lookback = timedelta(minutes=5)
oldest = (now - lookback).strftime('%Y-%m-%d %H:%M:%S')

lines = []

with open('logfile.log', 'r') as f:
    for line in f:
        if line[:19] > oldest:
            lines.append(line)

if lines:
    message = '\n'.join(lines)
    # send message per mail...

撰写回答