zoukankan      html  css  js  c++  java
  • 分析错误日志,发送邮件通知

    # -*- 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()
    

      

  • 相关阅读:
    【Python学习笔记之三】lambda表达式用法小结
    Cisco Packet Tracer 6.0 实验笔记
    Kali Linux 下安装中文版输入法
    kali 2018.1安装教程
    Kali Linux菜单中各工具功能大全
    互联网电商购物车架构演变案例
    互联网业务场景下消息队列架构
    物流系统高可用架构案例
    高并发下海量容器案例一
    客服系统微服务架构的演化
  • 原文地址:https://www.cnblogs.com/2014-02-17/p/6955731.html
Copyright © 2011-2022 走看看