日志¶

    当想要为项目配置日志时,应当在程序启动时尽早进行配置。如果完了,那么 app.logger 就会成为缺省记录器。如果有可能的话,应当在创建应用对象之前配置日志。

    这个例子使用 来创建一个类似于 Flask 缺省配置的日志记录配置:

    如果在操作 app.logger 之后配置日志,并且需要移除缺省的日志记录器,可以导入并移除它:

    1. from flask.logging import default_handler
    2.  
    3. app.logger.removeHandler(default_handler)

    当产品运行在一个远程服务器上时,可能不会经常查看日志信息。 WSGI 服务器可能会在一个文件中记录日志消息,而你只会在当用户告诉你出错的时候才会查看日志文件。

    为了主动发现并修复错误,可以配置一个 ,用于在一般错误或者更高级别错误发生时发送一封电子邮件:

    1. import logging
    2. from logging.handlers import SMTPHandler
    3.  
    4. mail_handler = SMTPHandler(
    5. fromaddr='server-error@example.com',
    6. toaddrs=['admin@example.com'],
    7. subject='Application Error'
    8. )
    9. mail_handler.setLevel(logging.ERROR)
    10. mail_handler.setFormatter(logging.Formatter(
    11. '[%(asctime)s] %(levelname)s in %(module)s: %(message)s'
    12. ))
    13.  
    14. if not app.debug:
    15. app.logger.addHandler(mail_handler)

    这需要在同一台服务器上拥有一个 SMTP 服务器。关于配置日志的更多内容请参阅Python 文档。

    1. from flask import request
    2. from flask.logging import default_handler
    3.  
    4. class RequestFormatter(logging.Formatter):
    5. record.url = request.url
    6. record.remote_addr = request.remote_addr
    7. return super().format(record)
    8.  
    9. formatter = RequestFormatter(
    10. '[%(asctime)s] %(remote_addr)s requested %(url)s\n'
    11. '%(levelname)s in %(module)s: %(message)s'
    12. )
    13. default_handler.setFormatter(formatter)
    14. mail_handler.setFormatter(formatter)

    其他库可能也会产生大量日志,而你也正好需要查看这些日志。最简单的方法是向根记录器中添加记录器。:

    单独配置每个记录器更好还是只配置一个根记录器更好,取决你的项目。:

    1. for logger in (
    2. app.logger,
    3. logging.getLogger('sqlalchemy'),
    4. logging.getLogger('other_package'),
    5. ):
    6. logger.addHandler(mail_handler)

    Werkzeug 记录基本的请求/响应信息到 'werkzeug' 日志记录器。如果根记录器没有配置,那么 Werkzeug 会向记录器添加一个

    根据情况不同,一个扩展可能会选择记录到 或者其自己的日志记录器。具体请查阅扩展的文档。