欢迎访问我的网站,希望内容对您有用,感兴趣的可以加入我们的社群。

Flask教程(十五)日志

Flask Web 迷途小书童 4年前 (2020-08-25) 7144次浏览 3个评论

软硬件环境

  • windows 10 64bit
  • anaconda3 with python 3.7
  • pycharm 2020.1.2
  • flask 1.1.2

视频看这里

此处是 youtube 的播放链接,需要科学上网。喜欢我的视频,请记得订阅我的频道,打开旁边的小铃铛,点赞并分享,感谢您的支持。

简介

flask 日志使用标准的 pythonlogging。所有与 flask 相关的消息都用 app.logger 来记录,同样的,这个日志记录器也可用于你自己的日志记录。

loggingpython 自带的系统模块,在 python实用模块 板块,我们已经介绍过它的使用方法,不了解的童鞋可以去看看,链接是 https://xugaoxiang.com/2019/12/04/python-module-logging/

日志配置

flask 中,不用任何配置就可以使用 app.logger,如下示例

@app.route('/login', methods=['POST'])
def login():
    user = get_user(request.form['username'])

    if user.check_password(request.form['password']):
        login_user(user)
        app.logger.info(f'{user.username} logged in successfully.')
        return redirect(url_for('index'))
    else:
        app.logger.info(f'{user.username} failed to log in')
        abort(401)

默认情况下,flask 会自动添加一个 StreamHandlerapp.logger。在请求过程中,它会写到由 WSGI 服务器指定的,保存在 environ['wsgi.errors'] 变量中的日志流(通常是 sys.stderr)中。在请求之外,则会记录到 sys.stderr

如果你对日志默认配置不太满意的话,可以自行设置。当想要为项目配置日志时,应当在创建应用对象之前进行配置。 如果晚了,那么 app.logger 就会成为缺省记录器。下面我们使用 logging.config.dictConfig 来配置日志,看示例

from flask import Flask

import logging.config

logging.config.dictConfig(
    {
        "version": 1,
        "disable_existing_loggers": False,
        "formatters": {
            "simple": {"format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s"}
        },
        "handlers": {
            "console": {
                "class": "logging.StreamHandler",
                "level": "DEBUG",
                "formatter": "simple",
                "stream": "ext://sys.stdout",
            },
            "info_file_handler": {
                "class": "logging.handlers.RotatingFileHandler",
                "level": "INFO",
                "formatter": "simple",
                "filename": "info.log",
                "maxBytes": 10485760,
                "backupCount": 50,
                "encoding": "utf8",
            },
            "error_file_handler": {
                "class": "logging.handlers.RotatingFileHandler",
                "level": "ERROR",
                "formatter": "simple",
                "filename": "errors.log",
                "maxBytes": 10485760,
                "backupCount": 20,
                "encoding": "utf8",
            },
            "debug_file_handler": {
                "class": "logging.handlers.RotatingFileHandler",
                "level": "DEBUG",
                "formatter": "simple",
                "filename": "debug.log",
                "maxBytes": 10485760,
                "backupCount": 50,
                "encoding": "utf8",
            },
        },
        "loggers": {
            "my_module": {"level": "ERROR", "handlers": ["console"], "propagate": "no"}
        },
        "root": {
            "level": "DEBUG",
            "handlers": ["error_file_handler", "debug_file_handler"],
        },
    }
)

app = Flask(__name__)

上面是一个将日志写入文件的配置示例,当日志文件大小大于 10M后,就用一个新的文件来存放日志,总的日志文件数目是50个。debug 的信息写入 debug.loginfo 的信息写入 info.logerror 的信息写入 error.log。日志中每一行的内容是这样的

{"format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s"}

各字段分别对应,日志时间 – 模块 – 日志等级 – 具体的日志内容

flask-logging

源码下载

https://github.com/xugaoxiang/FlaskTutorial

Flask系列教程

更多 Flask 教程,请移步

https://xugaoxiang.com/category/python/flask/

喜欢 (0)

您必须 登录 才能发表评论!

(3)个小伙伴在吐槽
  1. my_module怎么调用到的
    匿名2021-10-21 02:09
  2. 非常好。
    匿名2020-09-11 15:50