工作中需要及时解决线上的 bug,所以,及时获取 log 中的 warning,error 是非常有必要的。

  1 import logging
  2 import logging.handlers
  3 
  4 class EncodingFormatter(logging.Formatter):
  5     def __init__(self, fmt, datefmt=None, encoding=None):
  6         logging.Formatter.__init__(self, fmt, datefmt)
  7         self.encoding = encoding
  8     
  9         
 10 def get_logger(logger_name, logger_level, logger_location, days):
 11     logger = logging.getLogger(logger_name)
 12     logger.setLevel(logger_level)
 13     
 14     log_format = "%(name)s\t%(asctime)s\t%(pathname)s\t[line:%(lineno)d]\t %(levelname)s\t %(message)s"
 15     formater = logging.Formatter(log_format)
 16     
 17     # 存入文件的日志
 18     handler = logging.handlers.TimedRotatingFileHandler(logger_location, "midnight", 1, days, encoding="utf-8")
 19     handler.suffix = "%Y%m%d"
 20     handler.setFormatter(formater)
 21     logger.addHandler(handler)
 22     
 23     # 发邮件的日志
 24     sh = logging.handlers.SMTPHandler("smtp.163.com", send_email, [receive_email_1, receive_email_2], 
 25                    "log error", credentials=(send_email, authority_password),secure=())
 26     sh.setLevel(logging.ERROR)
 27     sh.setFormatter(EncodingFormatter('%(name)s\t%(asctime)s\t%(pathname)s\t[line:%(lineno)d]\t %(levelname)s\t %(message)s', encoding='utf-8'))
 28     logger.addHandler(sh)
 29     
 30     return logger
~                              

这里有两个坑,但是代码里应该都已经解决了。

  1. 邮件发送中文的坑,用 EncodingFormatter 解决;
  2. python logging 模块发邮件
    邮箱的密码不是登录密码,而是授权码。首先需要打开邮箱的客户端授权,然后设置授权码。
    python logging 模块发邮件

相关文章:

  • 2022-01-10
  • 2021-10-25
  • 2021-11-26
  • 2022-03-03
  • 2021-11-27
  • 2022-03-02
  • 2021-10-30
  • 2021-09-07
猜你喜欢
  • 2022-12-23
  • 2022-01-07
  • 2022-12-23
  • 2021-06-29
  • 2021-07-29
  • 2021-06-28
  • 2022-12-23
相关资源
相似解决方案