Flask应用Logger无法写入日志文件问题求助
解决Flask日志无法写入record.log文件的问题
问题根源
- 日志器不匹配:你在
__init__.py中创建了自定义日志器imp_calc,但实际在routes.py中调用的是Flask内置的app.logger,二者是独立的日志实例,自定义日志器的配置并未作用到实际调用的app.logger上。 logging.basicConfig失效:Flask启动时会自动初始化日志系统,后续调用logging.basicConfig不会覆盖已有配置,导致文件写入的设置不生效。
解决方案(二选一即可)
方案1:配置Flask内置app.logger写入文件
修改imp_calc/__init__.py中的日志配置部分,直接给app.logger添加文件处理器:
# __init__.py from flask import Flask from flask_sqlalchemy import SQLAlchemy from flask_bcrypt import Bcrypt from flask_login import LoginManager import logging from logging.handlers import RotatingFileHandler # 导入文件处理器 app = Flask(__name__) app.debug = True # 配置日志文件处理器 handler = RotatingFileHandler('record.log', maxBytes=10240, backupCount=10) handler.setLevel(logging.INFO) # 设置日志格式(可选,推荐添加) formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') handler.setFormatter(formatter) # 将处理器添加到app.logger app.logger.addHandler(handler) app.logger.setLevel(logging.INFO) # 后续的数据库、SECRET_KEY等配置保持不变... db = SQLAlchemy(app) bcrypt = Bcrypt(app) login_manager = LoginManager(app) login_manager.login_view = "login_page" login_manager.login_message_category = "info" from imp_calc import routes
routes.py中的代码无需修改,继续使用app.logger.info()即可,日志会同时输出到终端和record.log文件。
方案2:使用自定义imp_calc日志器并确保调用
步骤1:修改__init__.py的日志配置
替换原有的日志代码,给自定义日志器添加文件处理器:
# __init__.py from flask import Flask from flask_sqlalchemy import SQLAlchemy from flask_bcrypt import Bcrypt from flask_login import LoginManager import logging from logging.handlers import RotatingFileHandler app = Flask(__name__) app.debug = True # 配置自定义日志器 logger = logging.getLogger('imp_calc') logger.setLevel(logging.INFO) logger.propagate = True # 允许日志传递到根日志器,实现终端输出(可选) # 添加文件处理器 handler = RotatingFileHandler('record.log', maxBytes=10240, backupCount=10) handler.setLevel(logging.INFO) formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') handler.setFormatter(formatter) logger.addHandler(handler) # 后续配置保持不变... db = SQLAlchemy(app) bcrypt = Bcrypt(app) login_manager = LoginManager(app) login_manager.login_view = "login_page" login_manager.login_message_category = "info" from imp_calc import routes
步骤2:修改routes.py调用自定义日志器
将app.logger.info()替换为自定义日志器的调用:
# routes.py import logging logger = logging.getLogger('imp_calc') @app.route('/') def home(): logger.info('Called hello_world!') # 使用自定义日志器 return render_template('index.html')
额外注意事项
- 确保运行程序的用户对项目根目录下的
record.log文件有写入权限,如果文件不存在,程序会自动创建。 - 若使用
RotatingFileHandler,可以避免日志文件过大,maxBytes设置单个日志文件大小上限,backupCount设置保留的备份日志数量。
内容的提问来源于stack exchange,提问作者Yusharth Singh
相关产品推荐
相关产品推荐

