欢迎访问我的网站,希望内容对您有用,感兴趣的可以加入免费知识星球。

Flask教程(十五)日志

Flask Web 迷途小书童 3年前 (2020-08-25) 5607次浏览 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
Ads Blocker Image Powered by Code Help Pro

Ads Blocker Detected!!!

请关闭 Adblock 等类似浏览器插件,然后刷新页面访问,感谢您的支持!

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.