Хранить информацию журнала как переменную для использования в оповещении по электронной почте

Я всего пару недель изучаю python без предыдущего опыта программирования, поэтому прошу прощения за свое невежество.

Я пытаюсь использовать комбинацию модулей для мониторинга папки на наличие новых файлов (сторожевой таймер), оповещения о любом событии (модуль ведения журнала), а затем отправить оповещение на мою электронную почту (smtplib).

Здесь я нашел действительно хороший пример: -python-watchdog">Как запустить функцию, когда что-либо изменяется в каталоге с помощью Python Watchdog?

Однако я застрял, пытаясь сохранить информацию журнала в качестве переменной для использования в своем сообщении электронной почты. Мне интересно, нужно ли мне выводить информацию журнала в файл, а затем читать строку для использования в качестве переменной.

Во всяком случае, это то, что у меня есть. Любая помощь приветствуется. А пока я продолжу гуглить.

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 = '[email protected]'
        receiver = '[email protected]'
        message = """From: No Reply <[email protected]>
        TO: Test User <[email protected]>
        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()

person Nick Biolo    schedule 19.01.2017    source источник
comment
Я имею в виду, что если вы можете зарегистрировать это, вы знаете, что правильно регистрируете. Просто взять эту переменную и отправить по почте?   -  person Bobby    schedule 19.01.2017


Ответы (2)


Вам нужен 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='[email protected]',
                                                toaddrs=['[email protected]'],
                                                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()
person Shane    schedule 20.01.2017
comment
Спасибо за ответы. Мне удалось заставить это работать с примером, который я нашел здесь: michaelcho.me/article/. - person Nick Biolo; 25.01.2017

Здесь удалось получить рабочий пример и адаптировать его к моим потребностям: https://www.michaelcho.me/article/using-pythons-watchdog-to-monitor-changes-to-a-directory

person Nick Biolo    schedule 25.01.2017