Python 3.8 Flask日志仅输出到文件,无法打印至控制台问题
解决Flask日志同时输出到控制台和文件的问题
你的代码问题出在Flask debug模式会自动重置日志配置,导致手动添加的控制台处理器被覆盖。以下是修复后的完整代码:
import logging from flask import Flask, make_response from flask_cors import CORS from Handlers import Handlers app = Flask(__name__) CORS(app, supports_credentials=True, resources=r'/*' , methods=['GET', 'HEAD', 'POST', 'OPTIONS', 'PUT', 'PATCH', 'DELETE'] , allow_headers=["Accept", "Authorization", "Content-Type", "X-CSRF-Token"]) @app.route('/', methods=['POST']) def handleBroker(): handlers = Handlers() return handlers.broker() @app.route('/handle', methods=['POST']) def handleSubmission(): handlers = Handlers() return handlers.handleSubmission() if __name__ == '__main__': # 配置app专属日志 logger = app.logger # 清空Flask默认添加的处理器,避免debug模式干扰 logger.handlers.clear() logger.setLevel(logging.INFO) # 定义日志格式 formatter = logging.Formatter('%(asctime)s %(levelname)s %(name)s %(threadName)s : %(message)s') # 文件处理器 fileHandler = logging.FileHandler('test.log') fileHandler.setLevel(logging.INFO) fileHandler.setFormatter(formatter) # 控制台处理器 consoleHandler = logging.StreamHandler() consoleHandler.setLevel(logging.INFO) consoleHandler.setFormatter(formatter) # 添加处理器到app日志器 logger.addHandler(fileHandler) logger.addHandler(consoleHandler) # 启动日志放在配置完成后 logger.info("Start broker-service port %s", 71) app.run(host="localhost", port=71, debug=True)
关键修复点:
- 清空默认处理器:调用
logger.handlers.clear()移除Flask自动添加的日志处理器,避免debug模式下的配置覆盖手动添加的控制台处理器。 - 调整日志输出时机:将启动日志移到日志配置完成后,确保这条日志也能同时输出到文件和控制台。
- 移除无用代码:删除未使用的
logging.getLogger('dev')代码,避免混淆。
额外说明:
如果需要同时保留Werkzeug的debug请求日志,保持logger.propagate = True(默认值)即可,app的日志会自动传播到root logger,不影响框架自带日志的输出。
内容的提问来源于stack exchange,提问作者user63898
相关产品推荐
相关产品推荐

