VS Code中Flask print语句终端无输出的缺失设置及app.logger使用问题
关于Flask中print输出与app.logger使用的问题
A部分:解决VS Code中Flask print语句不显示的问题
你当前的Flask应用运行正常,但views.py里的print语句完全没输出,连Debug Console里都找不到,改debug和reloader参数也没用,核心问题出在调试配置的启动方式和重载器的输出屏蔽上,按以下步骤修复:
1. 修正launch.json配置
把启动模块改成flask官方模块,补全启动参数并指定输出终端,替换后的配置如下:
{ "version": "0.2.0", "configurations": [ { "name": "Python: Flask", "type": "python", "request": "launch", "module": "flask", "env": { "FLASK_APP": "${workspaceFolder}\\app.py", "FLASK_ENV": "development", "FLASK_DEBUG": "1" }, "args": [ "run", "--no-reload" ], "jinja": true, "console": "integratedTerminal" } ] }
关键改动说明:
- 用
flask模块启动,符合官方启动规范,避免直接运行app模块导致的输出丢失 - 加
--no-reload关闭重载器,防止子进程的print输出被VS Code捕获不到 - 指定
console: integratedTerminal强制把输出定向到VS Code集成终端
2. 调整app.py的启动代码
因为已经用调试配置管理启动参数,把本地启动代码注释掉,避免冲突:
from flask import Flask import views app = Flask(__name__) app.secret_key = 'BAD_SECRET_KEY' app.add_url_rule('/', view_func=views.index) app.add_url_rule('/index', view_func=views.index) app.add_url_rule('/page1', view_func=views.page_one_func) app.add_url_rule('/page1_processed', view_func=views.page_one_add_input) # 注释掉本地启动逻辑,改用调试配置启动 # if __name__ == "__main__": # app.config['SERVER_NAME'] = f"127.0.0.1:5000" # app.run(debug=True, use_reloader=True)
3. 确认启动方式
调试运行时,一定要选择你配置的Python: Flask选项,不要用Code Runner等第三方插件启动,否则输出可能不会定向到终端。
B部分:在views.py中使用app.logger的方法
有两种简单可行的方式,按需选择:
方式1:直接导入app实例
修改views.py,从app模块导入已创建的app对象即可使用:
from flask import render_template, request from app import app def index(): app.logger.info('calling index...') return render_template('index.html.jinja') def page_one_add_input(): # 示例:输出调试级别的日志 app.logger.debug(f"请求参数类型: {type(request.args)}") vars = {'exp_dict': exp_dict} return render_template('page1.html.jinja', vars=vars)
方式2:使用current_app代理(避免循环导入)
如果项目结构复杂怕出现循环导入,用Flask提供的current_app代理对象:
from flask import render_template, request, current_app def index(): current_app.logger.info('calling index...') return render_template('index.html.jinja')
可选:自定义日志格式
如果想让日志更清晰,在app.py里添加日志配置:
import logging from flask import Flask import views app = Flask(__name__) # 配置日志级别和格式 logging.basicConfig(level=logging.INFO) log_formatter = logging.Formatter('%(asctime)s | %(levelname)s | %(message)s') stream_handler = logging.StreamHandler() stream_handler.setFormatter(log_formatter) app.logger.addHandler(stream_handler) # 路由配置...
内容的提问来源于stack exchange,提问作者Meghan M.
相关产品推荐
相关产品推荐

