flask: 保存异常时的错误信息和堆栈到日志

一,代码:

定义异常的处理

app.py

import os
from dotenv import load_dotenvfrom flask import Flask,jsonifyfrom 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 userapp.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."), 500if __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)

 

二,测试效果:

控制台输出:

image

查看日志:

image

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/959991.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2020:【例4.5】第几项

2020:【例4.5】第几项 时间限制: 1000 ms 内存限制: 65536 KB 提交数:91171 通过数: 63263 【题目描述】 对于正整数n,m ,求s=1+2+3……+n ,当加到第几项时,s 的值会超过m ? 【输入】 输入m 。 【输出…

Camsys 时间戳信息简介

不同平台时间戳介绍 1.征程 3 平台 其中 u64 timestamps: 硬件时间戳,是跟 CPU 一起用的 64 bit system counter,1s 是 24M 个 clock。 FS 的时候从硬件寄存器读取。读取的值除以 24000 是毫秒,除以 24000000 是秒…

git新建分支,以及推送本地代码到新建分支

第一步:在GitHub上创建新分支 打开GitHub仓库页面 点击"Branches"超链接 输入新分支名(如MD)并创建 ⚠️ 注意:新建的分支默认与当前默认分支(通常是master)内容一致 第二步、本地初始化并关联远程仓库…

20251108——读后感4

使用Git等版本控制工具很重要。团队开发时,每个人的代码变更都能被跟踪,出现问题可快速回滚。比如团队开发一个功能,有人误改代码导致系统出错,通过Git的版本历史能迅速找到问题版本并修复。

ESP-IDF开发环境搭建(Fedora)

ESP-IDF开发环境搭建(Fedora)如果想在Fedora里进行SSH外部连接,需要修改一些地方:sudo vi /etc/ssh/ssh_config,在里面将被注释的Port 22打开; 回到终端执行systemctl enable sshd.service 终端执行systemctl st…

深入解析:【深入浅出PyTorch】--6.2.PyTorch进阶训练技巧2

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Django `models.Field` 所有常见安装参数的完整清单与说明表

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Java Redis “Sentinel(哨兵)与集群”面试清单(含超通俗生活案例与深度理解) - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

操作系统中的索引节点存放什么数据?

目录索引节点(inode)的核心内容1. 文件的元数据2. 指向数据块的指针3. 文件的类型信息关键点:inode 中不包含什么?一个生动的比喻总结表格索引节点(inode)的核心内容 可以把 inode 想象成一个文件的“身份证”或…

后缀学习笔记 | -er/-or -ee 系列 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

应用于ElasticSearch的C++ API——elasticlient - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

CICD程序选型指南,Jenkins vs Arbess哪一款更好用?

CICD程序选型指南,Jenkins vs Arbess哪一款更好用?pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&quo…

China Collegiate Programming Contest (CCPC) Jinan Site (The 3rd Universal Cup. Stage 17: Jinan) 题解

目录Problem A. The FoolProblem B. The MagicianProblem C. The EmpressoProblem D. The EmperorProblem E. The ChariotProblem F. The HermitProblem G. The Wheel of FortuneProblem H. StrengthProblem I. The Ha…

LLM 训练基础概念与流程简介

1. LLM 训练基础概念 1.1 预训练(Pretrain) LLM 首先要学习的并非直接与人交流,而是让网络参数中充满知识的墨水,“墨水” 理论上喝的越饱越好,产生大量的对世界的知识积累。 预训练就是让 Model 先埋头苦学大量基…

完整教程:Suppr超能文献的zotero插件-github项目的介绍

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

TensorRT 和 ONNX Runtime 推理优化实战:10 个降低延迟的工程技巧

模型速度的瓶颈往往不在算法本身。几毫秒的优化累积起来就能让用户感受到明显的性能提升。下面这些技术都是在生产环境跑出来的经验,不需要重构代码实施起来也相对简单并且效果显著。https://avoid.overfit.cn/post/4…

csp-j/s历险记

csp-j/s比赛一直是一个十分SB优质的比赛 -在那个晴空万里的早上,与同学们共同坐地铁前往CSP-J考场-ye————————————————————————————————! -从从容容游刃有余 ——第一题—— AC! —…

深信服AC1700

备份软件下载地址:深信服技术支持-工具专区 恢复出厂设置方法:深信服社区-专业、开放、共享 升级包下载地址:行为管理AC-深信服技术支持当前升级包版本为Sangfor-AC-13.0.120共有5个app 开始升级:正在检测软件升级…

2025年FFS重膜包装机厂家综合实力排行榜TOP5

文章摘要 随着包装行业智能化转型加速,FFS重膜包装机市场呈现爆发式增长。2025年行业数据显示,全自动重袋包装设备需求同比增长32%,其中技术领先企业占据70%市场份额。本文基于权威数据和技术参数评测,为您呈现当前…

2025年重袋包装机品牌排行榜:十大实力厂家综合评测

文章摘要 2025年重袋包装机行业迎来智能化升级浪潮,本文基于技术实力、市场口碑和服务能力综合评测十大重袋包装机品牌,为行业用户提供权威选购参考。其中合肥徽达智能装备有限公司凭借全自动技术创新和一站式解决方…