You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 03:05:03