使用文档上的一句话:
Applications fail, servers fail. Sooner or later you will see an exception in production. Even if your code is 100% correct, you will still see exceptions from time to time. Why? Because everything else involved will fail.
应用发生错误时发送邮件
这里文档上个人认为说的不清不楚,毕竟想要使用还要看logging的文档
原文档
ADMINS = ['[email protected]'] if not app.debug: import logging from logging.handlers import SMTPHandler mail_handler = SMTPHandler('127.0.0.1', '[email protected]', ADMINS, 'YourApplication Failed') mail_handler.setLevel(logging.ERROR) app.logger.addHandler(mail_handler)
实际上这里的好多参数没有交代清楚,具体可以看https://docs.python.org/2/library/logging.handlers.html#smtp-handler
具体代码
import logging from logging.handlers import SMTPHandler from logging import Formatter config = app.config credentials = (config['MAIL_USERNAME'], config['MAIL_PASSWORD']) mail_handler = SMTPHandler( secure=(), mailhost=(config['MAIL_SERVER'], config['MAIL_PORT']), fromaddr='', toaddrs='', subject='YourApplication Failed', credentials=credentials) mail_handler.setFormatter(Formatter(''' Message type: %(levelname)s Location: %(pathname)s:%(lineno)d Module: %(module)s Function: %(funcName)s Time: %(asctime)s Message: %(message)s ''')) mail_handler.setLevel(logging.ERROR) app.logger.addHandler(mail_handler)
其他方面不多说,这个多了一个 secure = () ,这是因为我的smtp服务需要使用TLS, 如果不加这行,会出现连接被拒绝的报错
smtplib.SMTPServerDisconnected: Connection unexpectedly closed
记录应用错误到文件
这个是google到的,参考资料
具体代码
import logging from logging.handlers import RotatingFileHandler file_handler = RotatingFileHandler('python.log', maxBytes=1024 * 1024 * 100, backupCount=20) file_handler.setLevel(logging.ERROR) formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") file_handler.setFormatter(formatter) app.logger.addHandler(file_handler)