Python中关于Flask日志的问题

我在蓝图中用 current_app.logger.error(),为何不会写入到日志文件中啊


Python中关于Flask日志的问题
3 回复

Flask默认使用Python标准库的logging模块。如果你没配置,Flask应用本身(比如app.logger)会有一个基础记录器,但可能不会按你期望的方式输出所有请求或内部日志。

要设置日志,最简单的是在创建应用后直接配置。比如,想让日志输出到控制台并显示时间、级别和信息,可以这样:

import logging
from flask import Flask

app = Flask(__name__)

# 设置日志级别和格式
logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')

# 现在 app.logger 会使用这个配置
app.logger.debug('这是一条调试信息')
app.logger.info('应用启动了')

如果你想要更细粒度的控制,比如把日志写到文件里,或者给不同模块设置不同级别,可以创建一个logger配置:

import logging
from logging.handlers import RotatingFileHandler
from flask import Flask

app = Flask(__name__)

# 创建一个文件处理器,限制单个文件最大1MB,保留3个备份
file_handler = RotatingFileHandler('app.log', maxBytes=1024*1024, backupCount=3)
file_handler.setLevel(logging.INFO)
# 设置日志格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)

# 将处理器添加到app的logger
app.logger.addHandler(file_handler)
app.logger.setLevel(logging.INFO)

@app.route('/')
def hello():
    app.logger.info('访问了首页')
    return 'Hello World!'

if __name__ == '__main__':
    app.run(debug=True)

这样,访问/时会在app.log文件里记录一条信息。Flask自带的app.logger用起来和标准的logging.getLogger(__name__)一样,你可以在视图、蓝图中用它记录错误、警告或业务信息。

总结:直接在应用启动时配置logging.basicConfig或为app.logger添加处理器就行。


要把 filehandle 注册到 logger 里

logging.getLogger().addHandler(file_log_handler)
这一句可以给,应用实例 app 添加上 logger 吗

回到顶部