• 分析错误日志,发送邮件通知


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

      

  • 相关阅读:
    [学习笔记]Java代码中各种类型变量的内存分配机制
    记录一次linux线上服务器被黑事件
    浅谈Facebook的服务器架构(组图)
    make: *** [sapi/cli/php] Error 1 解决办法
    linux CentOS 系统下如何将php和mysql命令加入到环境变量中
    Linux系统安装Apache 2.4.6
    日请求亿级的QQ会员AMS平台PHP7升级实践
    聊一聊淘宝首页和它背后的一套
    PHP与MySQL通讯那点事
    PHP多进程(4) :内部多进程
  • 原文地址:https://www.cnblogs.com/2014-02-17/p/6955731.html
Copyright © 2020-2023  润新知