flask: 保存异常时的错误信息和堆栈到日志
一,代码:
定义异常的处理
app.py
import os
from dotenv import load_dotenv
from flask import Flask,jsonify
from flask_sqlalchemy import SQLAlchemy
# 加载变量
dotenv_path = os.path.join(os.path.dirname(__file__), '.env')
load_dotenv(dotenv_path=dotenv_path, verbose=True, override=True)
db_uri = os.getenv("SQLALCHEMY_DATABASE_URI")
print("打印配置项:")
print(db_uri)
app = Flask(__name__)
# 数据库信息
host = '127.0.0.1'
port = '3306'
database = 'mybase'
username = 'root'
password = 'rootpassword'
# 数据库类型+连接数据库的插件,这里使用的pymysql
DB_URI = f'mysql+pymysql://{username}:{password}@{host}:{port}/{database}'
# 配置数据库连接
app.config['SQLALCHEMY_DATABASE_URI'] = DB_URI
# 绑定Flask对象
db = SQLAlchemy()
db.init_app(app)
from controller.admin import admin
from controller.user import user
app.register_blueprint(admin,url_prefix="/admin")
app.register_blueprint(user,url_prefix="/user")
import logging
from logging.handlers import RotatingFileHandler
import traceback
# 配置日志
file_handler = RotatingFileHandler("app_error.log")
file_handler.setLevel(logging.INFO)
file_handler.setFormatter(logging.Formatter('%(asctime)s %(levelname)s: %(message)s [in %(pathname)s:%(lineno)d]'))
app.logger.addHandler(file_handler)
app.logger.setLevel(logging.DEBUG)
# 处理404找不到地址
@app.errorhandler(404)
def page_not_found(error):
data = {
"status": "failed",
"code": 500,
"msg": "错误的路径"
}
return jsonify(data), 404
# 处理异常
@app.errorhandler(Exception)
def handle_exception(error):
stack = traceback.format_exc()
app.logger.error(f"An error occurred: {str(error)}")
app.logger.error(stack)
return failed_response(500,"An internal error occurred."), 500
if __name__ == '__main__':
app.run(debug=True)
触发异常
# 用蓝图注册路由
@user.route("/add/")
def user_add():
1 / 0 # 触发错误
# 得到get参数
name = request.values.get('name')
age = request.args.get('age')
# 返回
data = {
"status": "success",
"code": 200,
"msg": "添加用户:"+name+",年龄:"+age
}
return jsonify(data)
二,测试效果:
控制台输出:

查看日志:

浙公网安备 33010602011771号