Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python日志记录:当级别>;=错误_Python_Email_Logging - Fatal编程技术网

python日志记录:当级别>;=错误

python日志记录:当级别>;=错误,python,email,logging,Python,Email,Logging,我的日志系统有几个处理程序、日志文件(INFO)、电子邮件处理程序(>ERROR)和用于可选调试的流处理程序。当出现错误/异常/关键消息时,我希望电子邮件处理程序将文件处理程序中的日志文件附加到错误电子邮件 import logging def initialize_logging(): logger = logging.getLogger() logger.setLevel(logging.INFO) file_handler = createFileHandler

我的日志系统有几个处理程序、日志文件(INFO)、电子邮件处理程序(>ERROR)和用于可选调试的流处理程序。当出现错误/异常/关键消息时,我希望电子邮件处理程序将文件处理程序中的日志文件附加到错误电子邮件

import logging

def initialize_logging():
    logger = logging.getLogger()
    logger.setLevel(logging.INFO)

    file_handler = createFileHandler()
    file_handler.setLevel(logging.INFO)
    logger.addHandler(file_handler)

    email_handler = createEmailHandler(file_handler.baseFilename)
    email_handler.setLevel(logging.ERROR)
    logger.addHandler(email_handler)
我找到了这个示例,但它基本上是从头开始编写处理程序


如果有一种更简单的方法来修改现有的SMTPHandler,我想看看源代码,这似乎是最简单的方法。单独附加日志文件可以很好地使用此处理程序和上述代码

class SMTPAttachmentHandler(logging.handlers.SMTPHandler):
    def __init__(self, mailhost, fromaddr, toaddrs, subject, credentials=None,
                 secure=None, attachment=None):
        super(SMTPAttachmentHandler, self).__init__(mailhost, fromaddr, toaddrs, subject,
                                                    credentials, secure)
        self.attachment = attachment

    def emit(self, record):
        if self.attachment is None or not os.path.isfile(self.attachment):
            return super(SMTPAttachmentHandler, self).emit(record)
        try:
            import smtplib
            from email.utils import formatdate
            from email.mime.text import MIMEText
            from email.mime.multipart import MIMEMultipart

            port = self.mailport
            if not port:
                port = smtplib.SMTP_PORT
            smtp = smtplib.SMTP(self.mailhost, port, timeout=self._timeout)

            msg = MIMEMultipart()
            msg['From'] = self.fromaddr
            msg['To'] = ",".join(self.toaddrs)
            msg['Date'] = formatdate()
            msg['Subject'] = self.getSubject(record)
            msg.attach(MIMEText(self.format(record).encode('utf-8'), 'html', 'utf-8'))

            dispo = 'attachment; filename="%s"' % os.path.basename(self.attachment)
            with open(self.attachment, "rb") as fd:
                attachment = MIMEText(fd.read())
                attachment.add_header("Content-Disposition", "attachment",
                                      filename=os.path.basename(self.attachment))
                msg.attach(attachment)

            if self.username:
                if self.secure is not None:
                    smtp.ehlo()
                    smtp.starttls(*self.secure)
                    smtp.ehlo()
                smtp.login(self.username, self.password)
            smtp.sendmail(self.fromaddr, self.toaddrs, msg.as_string())
            smtp.quit()
        except (KeyboardInterrupt, SystemExit):
            raise
        except:
            self.handleError(record)