将日志信息存储为变量以用于电子邮件警报

时间:2017-01-19 16:44:27

标签: python email outlook smtplib watchdog

我只有几个星期的时间学习python而没有以前的编程背景所以我为我的无知而道歉..

我尝试使用模块组合来监控新文件的文件夹(看门狗),警告任何事件(日志记录模块),然后将警报发送到我的电子邮件(smtplib)。

我在这里找到了一个非常好的例子:How to run an function when anything changes in a dir with Python Watchdog?

但是,我一直试图将日志信息保存为我的电子邮件中使用的变量。我想知道我是否需要将日志记录信息输出到文件中,然后在行中读取以用作变量。

无论如何,这就是我所拥有的。任何帮助表示赞赏。与此同时,我将继续使用Google。

import sys
import time
import logging
from watchdog.observers import Observer
from watchdog.events import LoggingEventHandler
import smtplib

class Event(LoggingEventHandler):
    def on_any_event(self, event):
        logMsg = logging.basicConfig(level=logging.INFO,
                        format='%(asctime)s - %(message)s',
                        datefmt='%Y-%m-%d %H:%M:%S')

        sender = 'NoReply@myDomain.com'
        receiver = 'test.user@myDomain.com'
        message = """From: No Reply <NoReply@myDomain.com>
        TO: Test User <test.user@myDomain.com>
        Subject: Folder Modify Detected

        The following change was detected: """ + str(logMsg)

        mail = smtplib.SMTP('mailServer.myDomain.com', 25)
        mail.ehlo()
        mail.starttls()
        mail.sendmail(sender, receiver, message)
        mail.close()

if __name__ == "__main__":

    path = sys.argv[1] if len(sys.argv) > 1 else '.'
    event_handler = Event()
    observer = Observer()
    observer.schedule(event_handler, path, recursive=False)
    observer.start()
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
    observer.join()

2 个答案:

答案 0 :(得分:0)

您需要的是 SMTPHandler ,以便每次文件夹更改(创建新日志)时,都会发送一封电子邮件。

import logging
from watchdog.observers import Observer
from watchdog.events import LoggingEventHandler

class Event(LoggingEventHandler):
    def on_any_event(self, event):
        # do stuff
        pass

if __name__ == "__main__":
    root = logging.getLogger()
    root.setLevel(logging.INFO)
    formatter = logging.Formatter('%(asctime)s - %(message)s',
                                  '%Y-%m-%d %H:%M:%S')
    root.setFormatter(formatter)

    mail_handler = logging.handlers.SMTPHandler(mailhost='mailserver',
                                                fromaddr='noreply@example.com',
                                                toaddrs=['me@example.com'],
                                                subject='The log',
                                                credentials=('user','pwd'),
                                                secure=None)
    mail_handler.setLevel(logging.INFO)
    mail_handler.setFormatter(formatter)
    root.addHandler(mail_handler) # Add this handler to root logger

    path = sys.argv[1] if len(sys.argv) > 1 else '.'
    event_handler = Event()
    observer = Observer()
    observer.schedule(event_handler, path, recursive=False)
    observer.start()
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
    observer.join()

答案 1 :(得分:0)

能够在这里获得工作示例并根据我的需求量身定制: https://www.michaelcho.me/article/using-pythons-watchdog-to-monitor-changes-to-a-directory