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

Flask应用Logger无法写入日志文件问题求助

解决Flask日志无法写入record.log文件的问题

问题根源

  1. 日志器不匹配:你在__init__.py中创建了自定义日志器imp_calc,但实际在routes.py中调用的是Flask内置的app.logger,二者是独立的日志实例,自定义日志器的配置并未作用到实际调用的app.logger上。
  2. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 06:45:35