Ответ 1
См. этот ответ, который я дал для аналогичного вопроса. Например, обработчик примера здесь; вы можете адаптировать его к своим требованиям.
Я пытаюсь использовать модуль Python logging
для отправки писем, содержащих журналы. Проблема, с которой я сталкиваюсь, заключается в том, что каждый раз, когда я пишу запись в журнале, отправляется электронное письмо. Как мне помещать в очередь сообщения журнала и отправлять одно электронное письмо по завершении script?
У меня такое ощущение, что оно выполняется с помощью метода emit()
, но я не могу понять, как его использовать.
import logging, logging.handlers
log = logging.getLogger("mylogger")
log.setLevel(logging.DEBUG)
h2 = logging.handlers.SMTPHandler(mailhost='mailserver',
fromaddr='[email protected]',
toaddrs=['[email protected]'],
subject='The log',
credentials=('user','pwd'),
secure=None)
h2.setLevel(logging.INFO)
h2.setFormatter(f)
log.addHandler(h2)
log.info("Did something")
log.info("Did something else")
log.info("This would send a third email. :-(")
См. этот ответ, который я дал для аналогичного вопроса. Например, обработчик примера здесь; вы можете адаптировать его к своим требованиям.
Просто подкласс SMTPHandler для создания желаемого поведения. вы можете, например, переопределить метод emit для отправки почты на каждое третье зарегистрированное сообщение
Внимание: в зависимости от выбранной вами реализации никакой почты вообще не будет отправлено, если вы регистрируетесь только один или два раза. Возможно, отложенная отправка может быть решением: подождите несколько секунд, прежде чем отправлять почту. Если после второго нет другой строки, а затем отправьте ее, добавьте строку в сообщение для отправки и подождите еще секунду... и так далее... (Отложенная отправка должна выполняться в отдельном потоке (рассмотрите возможность использования Timer)