gpt4 book ai didi

python - 实时读取Apache日志文件并发送邮件-Python

转载 作者:太空宇宙 更新时间:2023-11-04 10:42:17 25 4
gpt4 key购买 nike

需要从服务器实时读取 Apache 日志文件,如果找到某个字符串,则必须发送电子邮件。我采用了找到的代码 here读取日志文件。接下来如何发送此电子邮件。我必须发出 sleep 命令吗?请指教。

注意:由于这是实时的,发送电子邮件后 python 程序必须再次开始读取日志文件。这个过程还在继续。

import time
import os

#open the file
filename = '/var/log/apache2/access.log'
file = open(filename,'r')

while 1:
where = file.tell()
line = file.readline()
if not line:
time.sleep(1)
file.seek(where)
else:
if 'MyTerm' in line:
print line

最佳答案

好吧,如果您希望它是实时的,而不是被困在发送邮件上,您可以启动一个单独的线程来发送电子邮件。以下是如何在 Python 中使用线程(threadthreading):

http://www.tutorialspoint.com/python/python_multithreading.htm

接下来,您可以使用 smtplib 在 python 中轻松发送电子邮件。这是来自同一网站的另一个示例(我使用它并且非常好):

http://www.tutorialspoint.com/python/python_sending_email.htm

好吧,您需要这样做以尽可能加快日志读取线程的速度并确保它不会等待邮件。

现在你必须注意一些陷阱:

  1. 您必须小心启动太多线程。例如,您每 1 秒解析一次日志(暂时假设),但发送一封电子邮件需要 10 秒。很容易看出(当然这是一个夸张的例子)你会启动很多线程,你会填满可用资源。我不知道你期望的字符串每秒会弹出多少次,但这是你必须考虑的场景。​​

  2. 同样,根据工作量,您可以实现流式算法并完全避免电子邮件。我不知道它是否适用于您的情况,但我也想提醒您注意这种情况。

  3. 您可以创建一个队列并将一定数量的邮件放入其中并一起发送,从而避免一次发送多封邮件(再次假设您不需要为每次出现的邮件触发警报目标字符串)。

更新

如果您真的想创建完美的程序,您可以通过在修改日志文件时使用事件触发来做一些其他事情。这样,您将完全避免 sleep ,并且每次向文件中添加内容时,都会调用 python,您可以解析新内容并在需要时发送电子邮件。看看看门狗:

http://pythonhosted.org/watchdog/

还有这个: python pyinotify to monitor the specified suffix files in a dir

https://github.com/seb-m/pyinotify

关于python - 实时读取Apache日志文件并发送邮件-Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19805267/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com