2016-04-13 24 views
2

Benim günlük sistemi birkaç işleyicileri, günlük dosyası (INFO), bir e-posta işleyicisi (> HATA) ve isteğe bağlı hata ayıklama için bir dere işleyicisi sahip olduğunda eki olarak tüm günlük dosyası e-posta. Bir hata/istisna/kritik mesaj oluştuğunda, e-posta işleyicisinin günlük dosyasını dosya işleyicisinden hata e-postasına eklemesini istiyorum.piton günlüğü: düzey> = HATA

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) 

Bu örneği buldum, ancak temel olarak işleyiciyi sıfırdan yazıyor. https://gist.github.com/LavinJ/238ccb229ac594a50b0a

kaynağında baktığımızda, mevcut SMTPHandler

cevap

0

değiştirerek daha basit araç olsaydı ben isterdim, bunu yapmak için en kolay yoludur görünür. Bu işleyici ve yukarıdaki kod ile de tek başına günlük dosyasını işleri ekleme

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)