Flask使用dictConfig根配置时DEBUG日志无法正常工作
Flask日志无输出问题的解决方案
问题分析
你的代码存在几个导致日志无法输出的核心问题:
- 注释语法错误:Python不支持
//作为注释符号,这会直接引发语法错误,代码根本执行不到日志输出语句。 - Debug模式日志冲突:当Flask以
debug=True启动时,会自动覆盖自定义的日志配置,导致你通过dictConfig设置的规则失效。 - 未定义变量:代码中的
some_uri未赋值,会触发NameError,直接中断请求处理流程。
修正后的代码
from flask import Flask, request, jsonify from logging.config import dictConfig import urllib.request import logging import sys import os def create_app(): # 配置日志系统 dictConfig( { "version": 1, "formatters": { "default": { "format": "[%(asctime)s] %(levelname)s in %(module)s: %(message)s", } }, "handlers": { "console": { "class": "logging.StreamHandler", "stream": "ext://sys.stdout", "formatter": "default", } }, "root": {"level": "DEBUG", "handlers": ["console"]}, } ) app = Flask(__name__) # 清空Flask默认日志处理器,避免覆盖自定义配置 app.logger.handlers = [] app.logger.setLevel(logging.DEBUG) # 重新添加自定义控制台处理器 console_handler = logging.StreamHandler(sys.stdout) formatter = logging.Formatter("[%(asctime)s] %(levelname)s in %(module)s: %(message)s") console_handler.setFormatter(formatter) app.logger.addHandler(console_handler) # 获取root日志器 LOGGER = logging.getLogger() @app.get('/whatever') def view_zuerivelo_publibike(): LOGGER.info('HELLO!') # 修复注释语法 # 替换为实际请求URI some_uri = "https://example.com" # 获取XML数据 try: response = urllib.request.urlopen(some_uri).read() except Exception as e: return jsonify({'message': str(e)}), 500 LOGGER.info(response) # 修复注释语法 # 字节流需解码为字符串后再返回JSON return jsonify({'response': response.decode('utf-8')}), 200 return app if __name__ == '__main__': # 若需保留debug模式,需确保日志配置不被覆盖;或直接设置debug=False create_app().run(debug=False, use_reloader=False)
关键修复点说明
- 注释语法修复:将所有
//替换为Python标准的#注释符号,避免语法报错。 - 日志冲突解决:清空Flask默认的日志处理器,手动添加自定义控制台处理器,防止Debug模式覆盖配置。
- 缺失变量补全:为
some_uri赋值,避免请求时触发未定义变量错误。 - 响应格式调整:
urllib返回的是字节流,直接用jsonify会报错,需解码为字符串后再返回。
内容的提问来源于stack exchange,提问作者Fi Li Ppo
相关产品推荐
相关产品推荐

