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 吗

