# -*- encoding:utf8 -*- """ logger_mail.py ~~~~~~~~~~~~~~ 分析每天的错误日志,发送邮件通知 =====================================B """ import sys import ConfigParser # 是Python自带的模块, 用来读写配置文件 import smtplib from datetime import datetime, timedelta from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.utils import COMMASPACE reload(sys) sys.setdefaultencoding('utf8') __all__ = [ 'send_error_mail' ] CONSTANTS_CFG_FILE = '/aa/sss/ddd/constants.cfg' IGNORE_PREFIX = ['NOTSET', 'DEBUG', 'INFO'] RECEIVERS = ['111111111111@qq.com', '2222222222@qq.com'] SMTP_SERVER = 'smtp.exmail.qq.com' ACCOUNT = 'hehe@qq.com' PASSWORD = '*****' MAIL_TEMPLATE = """ <html > <head > </head > <body > <h1 > {subject} < /h1 > <p > {content} < p > </body > </html > """ def _can_ignore(line): """不是错误记录忽略""" prefix = line[:10] prefix = prefix.split('|')[0].upper() return True if prefix in IGNORE_PREFIX else False def _load_application_log(filename): error_msgs = [] with open(filename) as f: for line in f: if _can_ignore(line): continue error_msgs.append(line) return error_msgs def send(subject, content): html_mimetext = MIMEText( MAIL_TEMPLATE.format(subject=subject, content=content), 'html') msg = MIMEMultipart() msg['From'] = ACCOUNT msg['To'] = COMMASPACE.join(RECEIVERS) msg['Subject'] = subject msg.attach(html_mimetext) smtp = smtplib.SMTP(SMTP_SERVER) smtp.login(ACCOUNT, PASSWORD) smtp.sendmail(ACCOUNT, RECEIVERS, msg.as_string()) smtp.quit() def send_error_mail(): #从配置中读取日志文件存放路径 conf = ConfigParser.ConfigParser() conf.read(CONSTANTS_CFG_FILE) logger_path = conf.get('path', 'LOGGER_PATH') yesterday = (datetime.now() + timedelta(days=-1)).strftime('%Y-%m-%d') filename = '{}.{}'.format(logger_path, yesterday) #读取日志文件 error_logs = _load_application_log(filename) subject = 'ARTPOLLOAPI {} BUG LIST'.format( datetime.now().strftime('%Y-%m-%d')) content = '<br/>'.join( [ line if '|' not in line else '<br/>{}'.format(line) for line in error_logs ]) #发送邮件 return send(subject, content) if __name__ == '__main__': send_error_mail()