将日志记录信息存储为变量以在电子邮件消息警报中使用

Store logging info as variable to use in email message alert

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

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

我在这里找到了一个很好的例子:

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

无论如何,这就是我所拥有的。任何帮助表示赞赏。同时我会继续 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()

您需要的是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()

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