如何在Flask项目中配置使用logging

我们一般在编程的时候使用print大法,但是当项目部署上线之后再使用print机会很不方便,今天我们看下如何在Flask中集成Pythonlogging模块。

该篇笔记摘自《Flask Web开发实战》一书,内容不错推荐购买。

书籍详情:http://greyli.com/flask-web-development/

Flask日志模块官方文档

在程序的实例化模块中进行一下操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import os
import logging
from logging.handlers import SMTPHandler, RotatingFileHandler

from flask import Flask, json, request


# 获得项目根目录
basedir = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))


def create_app(config_name):
app = Flask(__name__)
app.config.from_object(config_name)

register_logging(app)
......

def register_logging(app):

app.logger.setLevel(logging.INFO)

formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

file_handler = RotatingFileHandler(os.path.join(basedir, 'logs/catchatlog.log'),
maxBytes=10 * 1024 * 1024, backupCount=10)
file_handler.setFormatter(formatter)
file_handler.setLevel(logging.INFO)

if not app.debug:
app.logger.addHandler(file_handler)

​ 为了让日志记录器记录INFO等级的日志事件,我们先将app.logger的等级设置为INFO。然后我们设置一个logging.Formatter对象设置日志的输出格式。为了避免日积月累产生一个巨大的日志文件,我们使用RotatingFileHandler类创建一个轮转文件类型的日志处理器,实例化这个类传入日志文件的目标路径,最大文件尺寸和备份数量。当日志文件的大小超过实例化时传入的maxBytes参数设定的值时(单位为byte,我们设置的为10MB),它会循环覆盖之前的记录;将backupCount参数设置为10会依次创建10个日志文件,10个文件全部存满10MB后会开始覆盖之前的文件。

这里的日志文件夹需要我们自己创建(记得加入 .gitignore

可以在代码中直接使用

1
current_app.logger.error(text)

​ 我们使用setFormatter方法设置处理器输出的日志格式,使用setLevel方法将文件日志处理器的接收日志等级设置为INFO

最后,我们对app.logger调用addHandler方法将处理器注册到logger对象中,添加if判断确保在调试模式下不会添加处理器,只有在线上才会。

知识就是财富
如果您觉得文章对您有帮助, 欢迎请我喝杯水!