当前位置: 首页 > news >正文

Flask python :logging日志功能使用

logging日志的使用

      • 一、了解flask日志
        • 1.1、Loggers记录器
        • 1.2、Handlers 处理器
        • 1.3、Formatters 格式化器
      • 二、使用日志
        • 2.1、官网上的一个简单的示例
        • 2.2、基本配置
        • 2.3、具体使用示例
        • 2.4、运行
      • 三、写在最后

一、了解flask日志

日志是一种非常重要的工具,可以帮助开发人员在应用程序中进行故障排除和错误调试。Flask应用程序的记录器可以记录应用程序的运行状态和错误,从而提供有价值的信息来分析和解决问题。

Flask采用标准 Python logging . 有关Flask应用程序的消息记录在 app.logger中,
Flask日志基本配置文档 ,在文档中了解到,在 Flask 中,我们可以使用 app.logger 对象来进行日志记录。Flask采用标准 Python logging . 有关Flask应用程序的消息记录在 app.logger

1.1、Loggers记录器

Loggers 即记录器,是日志系统的入口,日志等级描述了 logger 记录的信息的严重程度:

  • DEBUG:低的、基于调试目的的系统信息
  • INFO:一般系统消息
  • WARNING:警告信息
  • ERROR:发生了报错的信息
  • CRITICAL:发生了严重的问题的信息
    当一条消息被发送到 logger,消息的等级会和 logger 的日志等级做一个比较,只有当消息的等级大于或等于 logger 的记录等级时,消息才会被当前 logger 进行更多的处理
1.2、Handlers 处理器

Handler即处理器,它的主要功能是决定如何处理logger中每一条消息,比如把消息输出到屏幕、文件或者Email中。和 logger 一样,handler也有级别的概念。
如果一条日志记录的级别不匹配或者低于handler的日志级别,则会被handler忽略。
一个logger可以有多个handler,每一个handler可以有不同的日志级别。
这样就可以根据消息的重要性不同,来提供不同类型的输出。

例如,你可以添加一个handler把ERROR和CRITICAL消息发到你的Email,再添加另一个 handler把所有的消息(包括ERROR和CRITICAL消息)保存到文件里。

1.3、Formatters 格式化器

Formatter即格式化器,主要功能是确定最终输出的形式和内容。

二、使用日志

2.1、官网上的一个简单的示例
@app.route('/login', methods=['POST'])
def login():user = get_user(request.form['username'])if user.check_password(request.form['password']):login_user(user)app.logger.info('%s logged in successfully', user.username)return redirect(url_for('index'))else:app.logger.info('%s failed to log in', user.username)abort(401)

如果不配置日志记录,Python的默认日志级别通常为“warning”。低于配置级别的内容将不可见

2.2、基本配置

当你想为项目配置日志记录时,应该在程序启动时尽快进行。如果在配置日志之前访问,那么 app.logger 就会成为缺省记录器。如果可能,请在创建应用程序对象之前配置日志记录。

此示例使用 dictConfig() 来创建一个类似于 Flask 缺省配置的日志记录配置:

from logging.config import dictConfigdictConfig({'version': 1,'formatters': {'default': {'format': '[%(asctime)s] %(levelname)s in %(module)s: %(message)s',}},'handlers': {'wsgi': {'class': 'logging.StreamHandler','stream': 'ext://flask.logging.wsgi_errors_stream','formatter': 'default'}},'root': {'level': 'INFO','handlers': ['wsgi']}
})app = Flask(__name__)

如果没有自己配置日志,Flask 会自动添加一个 StreamHandler app.logger 。 在请求过程中,它会写到由 WSGI 服务器指定的,保存在 environ['wsgi.errors'] 变量中的日志流(通常是 sys.stderr)中。在请求之外,则会记录到 sys.stderr

2.3、具体使用示例
from flask import Flask, request
from logging.config import dictConfigdictConfig({"version": 1,"disable_existing_loggers": False,  # 不覆盖默认配置"formatters": {  # 日志输出样式"default": {"format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s"}},"handlers": {"console": {"class": "logging.StreamHandler",  # 控制台输出"level": "DEBUG","formatter": "default",},"log_file": {"class": "logging.handlers.RotatingFileHandler","level": "INFO","formatter": "default",   # 日志输出样式对应formatters"filename": "./logs/flask.log",  # 指定log文件目录"maxBytes": 20*1024*1024,   # 文件最大20M"backupCount": 10,          # 最多10个文件"encoding": "utf8",         # 文件编码},},"root": {"level": "DEBUG",  # # handler中的level会覆盖掉这里的level"handlers": ["console", "log_file"],},}
)app = Flask(__name__)@app.route('/login', methods=['POST'])
def login():app.logger.debug(f'login request payload: {request.json}')user = request.json.get('username')if user == 'test':app.logger.info(f'{user} logged in successfully')return {'msg': 'success!', 'access_token': '********token******'}else:app.logger.info('%s failed to log in', user.username)return {'msg': 'username or password invalid', 'access_token': ''}if __name__ == '__main__':app.run()

可以再精简一下,把日志的处理单独拉出来:

import osfrom flask import Flaskfrom project.extension import db, cors
from project.config import config  # 导入存储配置的字典from project.blog import blog_base_blueprint
import logging
from logging.handlers import RotatingFileHandlerdef create_app(config_name=None):if config_name is None:config_name = os.getenv('FLASK_ENV', 'development')  # 从环境变量中获取FLASK_ENV,并设置默认值app = Flask('project')# setup config,导入配置,根据配置环境实例化app.config.from_object(config[config_name])# 注册扩展register_extension(app)# 注册蓝图register_blueprint(app)#注册日志处理器register_log(app)return app# 注册flask拓展
def register_extension(app: Flask):db.init_app(app)db.app = appcors.init_app(app, origins="*")# 注册蓝图
def register_blueprint(app: Flask):app.register_blueprint(blog_base_blueprint)def register_log(app: Flask):app.logger.setLevel(logging.INFO)formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')file_handler = RotatingFileHandler(app.config['BASE_DIR'] + '/storage/logs/blogin.log', maxBytes=10 * 1024 * 1024, backupCount=10)file_handler.setFormatter(formatter)file_handler.setLevel(logging.INFO)app.logger.addHandler(file_handler)

然后再每个模块需要的地方,再单独使用日志,比如我的蓝图中使用:
在这里插入图片描述

2.4、运行

项目运行以后,访问我/api/posts,然后在文件storage/logs/blogin.log中,就能看到日志喽。
这里一定要保证有这个目录,并且有写入文件的权限,否则会报错

在这里插入图片描述

三、写在最后

宣传一波:大家若是有人想北京租房可以联系我,主要是物资学院、通州北关、北苑、草房的房子。(注:我不是中介哟,我也不打算转行做中介,是我靠谱的朋友在做)
在这里插入图片描述

相关文章:

Flask python :logging日志功能使用

logging日志的使用 一、了解flask日志1.1、Loggers记录器1.2、Handlers 处理器1.3、Formatters 格式化器 二、使用日志2.1、官网上的一个简单的示例2.2、基本配置2.3、具体使用示例2.4、运行 三、写在最后 一、了解flask日志 日志是一种非常重要的工具,可以帮助开发…...

ethers.js:sign(签名)

Signers 在ethers中Signer是以太坊账户的抽象,可以用来签名消息和交易,如将签名的交易发送到以太坊网络以执行状态更改的操作。 npm install ethers5.4.0// 引入 import { ethers } from ethers签名 this.provider new ethers.providers.Web3Provider(…...

使用npm i进行admin依赖安装的时候出现问题

提示: npm ERR! code CERT_HAS_EXPIRED npm ERR! errno CERT_HAS_EXPIRED npm ERR! request to https://registry.npm.taobao.org/string-width failed, reason: certificate has expired 切换淘宝源到http或者更换其他国内镜像 npm config set registry http:/…...

【Python笔记-FastAPI】定时任务实现(APScheduler)

目录 一、常见触发器 (一) DateTrigger (二) IntervalTrigger (三) CronTrigger (四) CombinationTrigger 二、代码示例 (一) task_scheduler.py (二) client.py 三、调用说明 (一) 注册任务 (二) 查询任务 (三) 删除任务 实现功能: 定时任务注册、修改、删除、查…...

『Apisix入门篇』从零到一掌握Apache APISIX:架构解析与实战指南

📣读完这篇文章里你能收获到: 🌐 深入Apache APISIX架构: 从Nginx到OpenResty,再到etcd,一站式掌握云原生API网关的构建精髓,领略其层次化设计的魅力。 🔌 核心组件全解析&#xff…...

easyExcel大数据量导出oom

easyExcel大数据量导出 异常信息 com.alibaba.excel.exception.ExcelGenerateException: java.lang.OutOfMemoryError: GC overhead limit exceededat com.alibaba.excel.write.ExcelBuilderImpl.fill(ExcelBuilderImpl.java:84)at com.alibaba.excel.ExcelWriter.fill(Excel…...

react native上传二进制图片、视频的方法

react native获取本地图片我用的react-native-image-picker,但是它只能获取图片路径,以及base64的图片,不能获取到binary二进制形式的。 一开始我是让后端改造接口,把原本传binary的改成了base64,可是,躲得…...

JVM之堆

堆的核心概述 一个JVM实例只存在一个堆内存,堆也是内存管理的核心区域。 Java堆区在JVM启动的时候即被创建,其空间大小也就确定了。是JVM管理的最大一块内存空间。 堆内存的大小是可以调节的。 《JVM虚拟机规范》规定,堆可以处于物理上不连…...

R语言实现——网状 Meta 分析

近来年,网状 Meta 分析相关研究不断涌现,此类研究不但能发表在国内各大核心期刊上,还能在SCI期刊甚至医学4大刊上看到其身影。随手在pubmed上面一搜索,就能得到一万多篇相关文献。俨然成为医学文献研究的“大杀器”! P…...

Java项目:77 springboot母婴商城

作者主页:源码空间codegym 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 本课题后端使用SpringBoot Spring Cloud框架,前端采用html,JQuery,JS,DIVCSS技术进行编程&…...

【排序算法】深入解析快速排序(霍尔法三指针法挖坑法优化随机选key中位数法小区间法非递归版本)

文章目录 📝快速排序🌠霍尔法🌉三指针法🌠挖坑法✏️优化快速排序 🌠随机选key🌉三位数取中 🌠小区间选择走插入,可以减少90%左右的递归🌉 快速排序改非递归版本&#x1…...

生成微信小程序二维码

首页 -> 统计 可以通过上面二个地方配置,生成小程序的二维码,并且在推广分析里,有详细的分析数据,...

网络编程(1)写一个简单的UDP网络通信程序【回显服务器】,并且实现一个简单的翻译功能

使用 JAVA 自带的api 目录 一、回显服务器 UdpEchoServer 服务器代码 客户端代码 二、翻译功能 UdpDictServer 在UdpDictServer里重写process方法 一、回显服务器 UdpEchoServer /*** 回显服务器* 写一个简单的UDP的客户端/服务器 通信的程序* 这个程序没有啥业务逻辑&am…...

Ansys Speos | Light Expert Group探测器组使用技巧

附件下载 联系工作人员获取附件 概述 相机挡板的设计需要在光路的不同位置同步多个照度图,以尽量减少杂散光。2023R2 Speos提供了一种新的探测器,用于高阶杂散光分析,可以同时对多个探测器进行光线追迹。Light Expert工具可以即时过滤3D视…...

C#学习笔记3:Windows窗口计时器

今日继续我的C#学习之路,今日学习自己制作一个Windows窗口计时器程序: 文章提供源码解释、步骤操作、整体项目工程下载 完成后的效果大致如下:(可选择秒数,有进度条,开始计时按钮等) &#xf…...

C语言与sqlite3入门

c语言与sqlite3入门 1 sqlite3数据类型2 sqlite3指令3 sqlite3的sql语法3.1 创建表create3.2 删除表drop3.3 插入数据insert into3.4 查询select from3.5 where子句3.6 修改数据update3.7 删除数据delete3.8 排序Order By3.9 分组GROUP BY3.10 约束 4 c语言执行sqlite34.1 下载…...

Rancher(v2.6.3)——安装Rancher

[详细安装说明请查看Rancher安装说明文档]:https://gitee.com/WilliamWangmy/snail-knowledge/blob/master/Rancher/Rancher%E4%BD%BF%E7%94%A8%E6%96%87%E6%A1%A3.md#1%E5%AE%89%E8%A3%85rancher Rancher部署Mysql(单机版):http…...

Aapche Nutch建立自己的搜索引擎

sudo apt install default-jdk‘ java -version openjdk version "11.0.22" 2024-01-16 vi .bashrc export JAVA_HOME/usr/lib/jvm/java-11-openjdk-amd64 爬梯子下载源代码 Apache Nutch™ – Downloads mkdir -p urls cd urls touch seed.txt 里面放入我的网站…...

阅读笔记(ICIP2023)Rectangular-Output Image Stitching

“矩形输出”图像拼接 Zhou, H., Zhu, Y., Lv, X., Liu, Q., & Zhang, S. (2023, October). Rectangular-Output Image Stitching. In 2023 IEEE International Conference on Image Processing (ICIP) (pp. 2800-2804). IEEE. 0. 摘要 图像拼接的目的是将两幅视场重叠的…...

就业班 第二阶段 2401--3.26 day6 Shell初识 连接vscode

远程连接vs_code可能出现的问题 C:\Users\41703\.ssh 验证远程主机的身份,如果连不上vscode,可以尝试删除这里面的公钥代码。 重新安装那个扩展,排除扩展本身的问题 谁连过我,并操作了什么 curl https://gitea.beyourself.org.c…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

音视频——I2S 协议详解

I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议&#xff0c;专门用于在数字音频设备之间传输数字音频数据。它由飞利浦&#xff08;Philips&#xff09;公司开发&#xff0c;以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...