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