当前位置: 首页 > 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…...

Nacos服务实例权重设置详解:如何根据服务器性能动态调整流量分配

Nacos服务实例权重设置详解:如何根据服务器性能动态调整流量分配 在分布式系统架构中,服务实例的性能差异是不可避免的现实问题。新采购的服务器与运行多年的老旧设备并存,不同配置的云主机混合部署,这些场景都要求我们能够智能地…...

快速原型构建遇阻?用快马AI一键绕过npm error 128,聚焦核心功能验证

最近在尝试用Node.js快速验证一个Web服务原型时,遇到了烦人的npm error code 128问题。这个错误通常和Git仓库权限相关,会直接卡住依赖安装流程。经过一番折腾,我总结出一套在InsCode(快马)平台快速绕开这个坑的实践方案,分享给同…...

自适应滤波实战:如何用LMS算法在MATLAB/Simulink中快速搭建一个‘简易版’维纳滤波器?

自适应滤波实战:LMS算法在MATLAB/Simulink中的工程化实现 在信号处理领域,自适应滤波技术因其强大的环境适应能力而备受青睐。想象一下,你正在处理一段被噪声污染的语音信号,或是试图从复杂工业环境中提取有效振动特征——传统固定…...

从游戏引擎到自动驾驶:聊聊八叉树(Octree)这个‘空间管理大师’的跨界打工史

从游戏引擎到自动驾驶:八叉树的跨界进化论 1980年代的一个深夜,约翰霍普金斯大学实验室里,一位计算机图形学研究员正对着闪烁的CRT显示器皱眉。他需要找到一种方法,让当时性能有限的计算机也能流畅渲染三维场景。这个看似普通的需…...

Go语言中的Interface:面向接口编程

Go语言中的Interface:面向接口编程 1. Interface的基本概念 Interface是Go语言中用于定义行为的一种类型,它指定了一组方法签名,但不提供具体实现。Interface是Go语言实现多态和解耦的核心机制,也是面向接口编程的基础。 Go语言的…...

企业开始用 AI 后,最容易被忽略的其实是这件事!

这两年,越来越多企业开始尝试把 AI 用到日常办公中。从写邮件、整理纪要,到查询知识库、生成文档,AI 正在从个人工具变成企业工作的一部分。但很多企业在推进 AI 时,首先关注的往往是功能和效率,比如“能不能写”“能不…...

革新性图表创作:Mermaid Live Editor如何重构技术可视化工作流

革新性图表创作:Mermaid Live Editor如何重构技术可视化工作流 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid-liv…...

CanFestival主站PDO配置避坑指南:以Kinco FD伺服的速度/位置模式控制为例

CanFestival主站PDO配置实战:从零解析Kinco FD伺服双模式控制 当你在深夜的实验室里盯着屏幕上闪烁的CAN报文,却发现伺服电机对控制指令毫无反应时,那种挫败感每个工控开发者都深有体会。本文将带你穿透CanFestival主站配置的迷雾&#xff0c…...

高效突破语言壁垒:KISS Translator的全场景翻译解决方案

高效突破语言壁垒:KISS Translator的全场景翻译解决方案 【免费下载链接】kiss-translator A simple, open source bilingual translation extension & Greasemonkey script (一个简约、开源的 双语对照翻译扩展 & 油猴脚本) 项目地址: https://gitcode.c…...

OWL ADVENTURE 作业批改场景应用:自动识别手写算式与批阅

OWL ADVENTURE 作业批改场景应用:自动识别手写算式与批阅 1. 引言 想象一下,一位数学老师晚上十点还在台灯下,面前堆着厚厚一摞作业本,需要逐题检查、打勾、画叉,再写上评语。日复一日,这种重复性劳动不仅…...