''' Created on 6 juil. 2017 @author: olivier.massot ''' from datetime import datetime from email.mime.text import MIMEText import logging.config import smtplib import sys from path import Path import yaml LOG_DIR = Path(r"%appdata%\logs").expandvars() LOG_DIR.makedirs_p() SYS_EXCEPT_HOOK = sys.excepthook def start(name="main", level=0, filename=""): # charge la configuration du logging depuis le fichier 'logging.yaml' configfile = Path(__file__).parent with open(configfile / 'logging.yaml', 'rt') as f: conf = yaml.load(f) if level: conf["loggers"][name]["level"] = level if not filename: filename = LOG_DIR / r'{}_{:%Y%m%d_%H%M}.log'.format(name, datetime.now()) conf["handlers"]["file"]["filename"] = filename logging.config.dictConfig(conf) logger = logging.getLogger(name) logger.info("Log start written at {}".format(filename)) class BufferingSMTPHandler(logging.handlers.BufferingHandler): def __init__(self, mailhost, fromaddr, toaddrs, subject, capacity): logging.handlers.BufferingHandler.__init__(self, capacity) self.mailhost = mailhost self.mailport = None self.fromaddr = fromaddr self.toaddrs = toaddrs self.subject = subject def flush(self): try: if len(self.buffer) > 0: port = self.mailport if self.mailport else smtplib.SMTP_PORT msg = "\n".join([self.format(record) for record in self.buffer]) msg = MIMEText(msg.encode('utf-8'), _charset='utf-8') msg['Subject'] = self.subject msg['From'] = self.fromaddr msg['To'] = ",".join(self.toaddrs) smtp = smtplib.SMTP(self.mailhost, port) smtp.sendmail(self.fromaddr, self.toaddrs, msg.as_string()) smtp.quit() self.buffer = [] except Exception as e: print(e) raise