前言:一般开发中日志会输出到console,log file,mail中,上篇章简述了logging模块加载yaml配置输出到控制台和文件中logging模块yaml配置,本文会详述logging如何发送email,嗯
[1]最重要的是实现SMTPHanler的设置,简述一下:
The SMTPHandler
class, located in the logging.handlers
module, supports sending logging messages to an email address via SMTP.(该类在logging.handler中,支持通过SMTP协议发送日志到邮箱)
其中SMTP(Simple Mail Transfer Protocol)即简单传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式,通过SMTP协议所指定的服务器,就可以把E-mail寄到收信人的服务器上了
[2]参数解析如下(API详见Logging handlers):
class logging.handlers.
SMTPHandler
(mailhost, fromaddr, toaddrs, subject, credentials=None, secure=None, timeout=1.0)
mailhost:指定的服务器,在这里笔者用的是smtp.163.com,port=25,两个参数使用tuple存放('smtp.163.com',25)
fromaddr:即发送人
toaddr:收件人,多个邮箱用list存储['test1@163.com','test2@163.com']
subject:邮件主题
credentials:凭证需要你的邮箱用户名和SMTP协议密码,可以自己设置,用户名密码也是以tuple形式存储('username','password') 注意:这里的密码不是邮箱登录密码
secure:指定的安全协议,可以不用设置 timeout:发送邮件的时间间隔
[3]代码如下:
errlog = logging.getLogger()
sh = logging.handlers.SMTPHandler(("smtp.163.com", 25), '****@163.com',
['46*****@qq.com', '*****@163.com'],
"logging from my app",
credentials=('******', '*****'),
)
errlog.addHandler(sh)
try:
a = 1 / 0
except:
errlog.warning("hha", exc_info=True)
[4]运行代码
qq和163邮箱分别收到邮件报警,搞定.