• python 模块 — logging模块、smtplib和email模块


    python 模块

    日志

    什么时候需要日志记录

    1. 排错
    2. 程序调试
    3. 用户行为分析

    logging模块

    日志等级数值表示描述
    DEBUG10最详细的日志,常用于调试
    INFO20仅次于debug的详细日志,记录关键节点
    WARNING30当前有不期望的事情发生了
    ERROR40发生错误问题,导致某些功能不能正常使用
    CRITICAL50发生严重错误程序不能运行了
    #简单使用
    import logging
    LOG_FORMAT = "%(asctime)s-%(levelname)s:%(message)s"
    logging.basicConfig(level=logging.INFO,format=LOG_FORMAT,filename="my.log")
    logging.debug("this is DEBUG")
    logging.info("this is INFO")
    logging.warning("this is WARNING")
    logging.error("this is ERROR")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    my.log

    2022-08-12 16:23:46,606-INFO:this is INFO
    2022-08-12 16:23:46,606-WARNING:this is WARNING
    2022-08-12 16:23:46,607-ERROR:this is ERROR
    
    • 1
    • 2
    • 3

    logging日志的四大组件

    1. 日志器 Logger – linux logrotate服务 – 配置文件/etc/logrotate.conf,/etc/logrotate.d
    2. 处理器 Handler
    3. 过滤器 FIlter
    4. 格式器 Formatter
    import logging
    from logging.handlers import RotatingFileHandler,TimedRotatingFileHandler
    
    #获取logger对象,用于记录日志
    logger = logging.getLogger("sc1")
    
    #创建handler对象,用于写入日志,规定日志输出到那里
    #输出到文件
    # fh = logging.FileHandler("my.log")
    #按大小轮转,这里指定日志500字节就轮转,最大2个备份文件
    # fh = RotatingFileHandler("my.log",maxBytes=500,backupCount=2)
    #按时间轮转,when是单位,D是日,s是秒,interval=2 两天一轮转 ,保存2个备份
    fh = TimedRotatingFileHandler("my.log",when="D",interval=2,backupCount=2)
    #输出到屏幕
    ch = logging.StreamHandler()
    #指定格式
    formatter = logging.Formatter("%(asctime)s-%(levelname)s:%(message)s")
    #绑定formatter到handler
    fh.setFormatter(formatter)
    #绑定handler到logger上
    logger.addHandler(fh)
    logger.addHandler(ch)
    
    #测试
    # logger.info("logger info ....")
    # logger.warning("logger warning ....")
    # logger.error("logger error ....")
    #手动生成数据测试
    # for i in range(1000):
    #     logger.warning(f"this is rotate test :{i}")
    
    #也可以通过配置文件 json格式去指定
    #生成logger对象的时候,没有传递参数进去,那生成的log就是root logger    父logger
    #传递了参数进去,类似子logger
    #子日志器就会继承夫日志器的配置
    
    logger2 = logging.getLogger("sc1")
    logger2.warning("this is logger2 message...")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    邮件发送

    邮件协议

    协议功能默认端口
    SMTP发送邮件25
    POP3接收邮件,客户端的操作都会反馈到服务器上110
    IMAP接收邮件,客户端的操作不会反馈到服务器上143
    普通文件信息邮件示例:
    • smtplib 发邮件
    • email 构建邮件内容
    import smtplib
    from email.mime.text import MIMEText
    
    #配置第三方服务
    mail_host = "smtp.qq.com"   #设置服务器
    mail_user = "你的账号@qq.com" #用户名
    mail_pass = "QQ邮箱授权码"  #授权码
    
    receivers = "接收方账号"
    
    #构建邮件内容(正文) --> 内容  类型  编码
    message = MIMEText("hello world",'plain','utf-8')
    
    message["From"] = mail_user 
    message["TO"] = receivers
    message["Subject"] = "邮件主题"
    
    #发送邮件使用的协议
    smtpobj = smtplib.SMTP()
    #连接qq服务器
    smtpobj.connect(mail_host)
    #登陆
    smtpobj.login(mail_user,mail_pass)
    #发送,message是对象,不能直接发,要先转为str
    smtpobj.sendmail(mail_user,receivers,message.as_string())
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
  • 相关阅读:
    读书笔记-学习GNU Emacs-3终篇
    安装Ant 保姆级别教程
    Mybatis - 常用 SQL 语句设计思路及具体实现 - 数据存在则更新,不存在则插入、批量更新、批量插入、连表查询 + - 字段加减法
    十二、集合操作
    JAVA面试题整理《微服务篇》三
    一、Vue.js 概述
    飞书与企业微信的异同
    LLM - Make Causal Mask 构造因果关系掩码
    Unity 一些常用特性收集
    学者观察 | 数字经济中长期发展中的区块链影响力——清华大学柴跃廷
  • 原文地址:https://blog.csdn.net/a1991376352/article/details/126308926