Flask框架-配置日志(1):flask使用日志
一、项目结构
study_flask
--| apps/
--| __init__.py
--| base/
--| logger.py
--| __init__.py
--| app.py
二、配置日志功能
1、base/logger.py
import os
import logging
from datetime import datetime,date,timedelta
from logging.handlers import RotatingFileHandler, TimedRotatingFileHandler
#项目根目录
BASE_DIR = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
#日志文件存放的目录
LOGS_DIR = os.path.join(BASE_DIR,'logs')
#使用RotatingFileHandler日志处理器,生成的日志文件存放的位置
FILE_LOGS_DIR = os.path.join(LOGS_DIR,'file_handler')
#使用TimedRotatingFileHandler日志处理器,生成的日志文件存放的位置
TIME_LOGS_DIR = os.path.join(LOGS_DIR,'time_handler')#创建logs目录
if not os.path.exists(LOGS_DIR):os.makedirs(LOGS_DIR)
#创建logs/file_handler目录
if not os.path.exists(FILE_LOGS_DIR):os.makedirs(FILE_LOGS_DIR)
#创建logs/time_handler目录
if not os.path.exists(TIME_LOGS_DIR):os.makedirs(TIME_LOGS_DIR)#1、基于文件大小切割的日志处理器
def getLogHandlerFile():# 文件名,以日期作为文件名log_file_name = date.today().strftime('%Y-%m-%d.log')# 构建日志文件的路径log_file_str = os.path.join(FILE_LOGS_DIR,log_file_name)'1、日志记录格式'# 默认日志等级的设置# logging.basicConfig(level=logging.INFO)# 设置日志的格式:发生时间,日志等级,日志信息文件名, 函数名,行数,日志信息formatter = logging.Formatter('[%(asctime)s][%(levelname)s][%(pathname)s: %(funcName)s function: %(lineno)s line]: %(message)s')'2、基于文件的日志处理器配置'# 创建日志记录器,指明日志保存路径,每个日志的大小,保存日志的上限file_log_handler = RotatingFileHandler(filename=log_file_str, #日志文件名maxBytes=1024 * 1024 * 10, #文件大小超过10MB后,就会生成一个新的日志文件,日志就写到新的文件中backupCount=10, #最大支持总的日志文件数encoding='UTF-8')file_log_handler.setFormatter(formatter) # 设置日志的格式file_log_handler.setLevel(logging.INFO) # 设置日志等级return file_log_handler # 基于文件大小分割日志的方案#2、基于时间切割的日志处理器
def getLogHanderTime():# 文件名,以日期作为文件名log_file_name = datetime.today().strftime('%Y-%m-%d-%H-%M.log')# 构建日志文件的路径log_file_str = os.path.join(TIME_LOGS_DIR, log_file_name)'1、日志记录的格式'# 默认日志等级的设置# logging.basicConfig(level=logging.DEBUG)# 设置日志的格式:发生时间,日志等级,日志信息文件名, 函数名,行数,日志信息formatter = logging.Formatter('[%(asctime)s][%(levelname)s][%(pathname)s: %(funcName)s function: %(lineno)s line]: %(message)s')'2、基于时间的日志处理器''''# 往文件里写入指定间隔时间自动生成文件的Handler# 实例化TimedRotatingFileHandler# interval是时间间隔,backupCount是备份文件的个数,如果超过这个个数,就会自动删除,when是间隔的时间单位,单位有以下几种:# S 秒# M 分# H 小时# D 天# 'W0'-'W6' 每星期(interval=0时代表星期一:W0)# midnight 每天凌晨'''file_log_time_handler = TimedRotatingFileHandler(filename=log_file_str, #日志文件的路径when='midnight', #凌晨零点进行文件分割backupCount=0, #保留旧文件数0interval=1, #分割一次encoding='utf-8') # 日志处理器file_log_time_handler.setFormatter(formatter) # 日志格式file_log_time_handler.setLevel(logging.DEBUG) # 日志等级return file_log_time_handler # 基于文件大小分割日志的方案if __name__ == '__main__':from flask import current_appcurrent_app.logger.error('手动写日志时')
2、apps/__init__.py
from base.loggers import getLogHanderTime,getLogHandlerFile
import logging
from flask import Flaskdef create_app():#创建一个flask实例,传递__name__ ,是把当前文路径作为flask实例的根路径#static和templates都是创建在该路径下的app = Flask(__name__,static_folder='../static',template_folder='../templates') #static目录位置是上层的static'基本配置''日志使用'app.logger.addHandler(getLogHanderTime())app.logger.addHandler(getLogHandlerFile())app.logger.setLevel(logging.DEBUG)return app
三、测试使用
1、在视图中使用
from flask import current_app
current_app.logger.error('手动写日志时')
2、在视图中抛出一个异常
四、日志文件
基于文件大小分割的日志文件路径: logs/file_handler/年-月-日.log
基于时间间隔分割的日志文件路径:logs/time_handler/年-月-日.log
相关文章:
Flask框架-配置日志(1):flask使用日志
一、项目结构 study_flask --| apps/ --| __init__.py --| base/ --| logger.py --| __init__.py --| app.py 二、配置日志功能 1、base/logger.py import os import logging from datetime import datetime,date,timedelta from logging.handlers import RotatingFileHandl…...
每天一道leetcode:1192. 查找集群内的关键连接(图论困难tarjan算法)
今日份题目: 力扣数据中心有 n 台服务器,分别按从 0 到 n-1 的方式进行了编号。它们之间以 服务器到服务器 的形式相互连接组成了一个内部集群,连接是无向的。用 connections 表示集群网络,connections[i] [a, b] 表示服务器 a …...
解决Windows系统远程登陆后vscdoe无法输入字符,键盘没有反应,鼠标可以点击,没有反应
文章目录 前言操作过程 前言 使用vscode编译器时,通过远程登录或者屏幕锁屏解锁后,vscode出现无法输入字符内容,但vscode没有死机,切换到其他软件的窗口再切换回来后,可以使用鼠标点击,但是只要使用键盘输…...
axios同一个接口,同时接收 文件 或者 数据
1、前端代码 const service axios.create({baseURL: "http://192.168.2.200:8080/api",timeout: 180000 })// 响应拦截 service.interceptors.response.use(async response > {if(response){// 请求时设置返回blob, 但是实际上可能返回的是json的情况if (respon…...
【腾讯云 TDSQL-C Serverless产品体验】抓取processon热门模版的标题生成词云
【腾讯云 TDSQL-C Serverless产品体验】抓取processon热门模版的标题生成词云 serverless服务是腾讯云自研的新一代云原生关系型数据库TDSQ L-C的无服务器架构版,是全Serverless架构的云原生数据库 前言 体验了一下腾讯云刚出的TDSQL-C Serverless,使用…...
算法通关村第九关 | 二叉树查找和搜索树原理
1. 二分查找的扩展问题 1.1山脉数组的巅峰索引 LeetCode852:题目核心意思是在数组中,从0到i是递增的,从i1到数组最后是递减的,让你找到这个最高点。 三种情况: mid在上升阶段的时候,满足arr[mid] > a…...
jenkins gitlab 安装
目录 一 准备安装环境 二 安装gitlab软件 三 配置gitlab 四 重新加载配置启动gitlab 五 修改密码 五 创建用户组 一 准备安装环境 sudo yum update sudo yum install -y curl policycoreutils-python openssh-server安装 Postfix 邮件服务器,以便 Git…...
Vue2(组件开发)
目录 前言一,组件的使用二,插槽slot三,refs和parent四,父子组件间的通信4.1,父传子 :父传子的时候,通过属性传递4.2,父组件监听自定义事件 五,非父子组件的通信六&#x…...
(二)结构型模式:8、代理模式(Proxy Pattern)(C++示例)
目录 1、代理模式(Proxy Pattern)含义 2、代理模式的UML图学习 3、代理模式的应用场景 4、代理模式的优缺点 5、C实现代理模式的实例 1、代理模式(Proxy Pattern)含义 代理模式(Proxy),为…...
代码审计-ASP.NET项目-未授权访问漏洞
代码审计必备知识点: 1、代码审计开始前准备: 环境搭建使用,工具插件安装使用,掌握各种漏洞原理及利用,代码开发类知识点。 2、代码审计前信息收集: 审计目标的程序名,版本,当前环境(系统,中间件…...
爬虫逆向实战(十四)--某培训平台登录
一、数据接口分析 主页地址:某培训平台 1、抓包 通过抓包可以发现登录是表单提交到j_spring_security_check 2、判断是否有加密参数 请求参数是否加密? 通过查看“载荷”模块可以发现有一个j_password加密参数 请求头是否加密? 无响应是…...
GT Code - 图译算法编辑器(集成QT、C++、C、Linux、Git、java、web、go、高并发、服务器、分布式、网络编程、云计算、大数据项目)
目录 项目概述 发文意义 项目介绍 功能分析 设计概要 功能展示 项目文档 项目概述 “GT Code 图译算法编辑器”是一款跨平台、轻量级的代码编辑器,主要面向软件开发人员,它实现了编辑、编译、绘制代码流程图、生成调试演示动画等功能,以…...
# 快速评估立功科技基于S32K324的TMS方案
文章目录 1.前言2.立功科技的TMS方案介绍2.1 介绍资料2.2 简要介绍 3.S32K3_TriMotor评估板测试3.1 环境搭建S32 Design Studio for S32 Platform 3.4安装RTD 2.0.0安装Freemaster 3.2 3.2 例程测试3.3 例程适配3.4 双核烧录3.5 测试 1.前言 最近和一些做汽车水泵/风机的客户交…...
docker+haror
docker 2013年诞生,推荐单容器只运行一个程序或进程,形成一个分布式的应用模型。 总结下来就是:docker带来启动流程更快,运行效率较高、资源损耗较小,属于轻量级的服务。 docker的安装 推荐的一键化安装的脚本&#…...
Shell编程——弱数据类型的脚本语言快速入门指南
目录 Linux Shell 数据类型 变量类型 运算符 算术运算符 赋值运算符 拼接运算符 比较运算符 关系运算符 控制结构 顺序结构 条件分支结构 if 条件语句 case 分支语句 循环结构 for 循环 while 循环 until 循环 break 语句 continue语句 函数 函数定义 …...
iOS textView支持超链接跳转
将某些文字变成高量可以点击的超链接核心功能代码 attri.addAttribute(NSAttributedString.Key.link, value:NSURL.init(string: "dctt:p/userPrivacy.html")!, range: NSRange.init(location: s.count - 4, length: 4) )textView.linkTextAttributes [NSAttributed…...
大牛分析相机镜头光学中疑难问题
1、变焦和对焦有什么区别? 变焦就是改变镜头的焦距(准确说是像距),以改变拍摄的视角,也就是通常所说的把被摄体拉近或推远。例如18-55mm和70-200mm镜头就是典型的变焦镜头。焦距越长,视角越窄。 对焦通常指调整镜片组和底片(传感器平面)之间的距离,从而使被摄物在CC…...
xacro机器人模型文件转urdf文件怎么编写launch文件启动gazebo仿真和在rviz2内显示模型
urdf文件很直白,每个零件的</link> </joint>都要编写一遍,每个零件数据都要自己算出来结果,很麻烦,但是用起来很简单。xacro写的模型文件可以把好多常量提前定义出来,不同大小的机器人只要只要改一下常量…...
前端图片转base64,并使用canvas对图片进行压缩
目录 1.图片转base64的应用场景 2.图片转base64代码 3.对上传的图片进行压缩 1.图片转base64的应用场景 图片转base64通常用在用户上传图片的情况下使用,他的作用就是让用户看到预览的图片不受网络的影响。 这是传统的文件传输的流程:首先是用户选择…...
电脑键盘打不了字按哪个键恢复?最新分享!
“有没有朋友知道电脑键盘为什么会莫名其妙就打不了字?明明用得好好的,突然就打不了字了,真的让人很迷惑!有什么方法可以解决吗?” 电脑键盘为我们的办公提供了很大的方便,我们可以利用键盘输入我们需要的文…...
初学Java之范型
范型包装类包装类的定义包装类的作用场景1:我想把数字放进列表里场景2:我想让方法返回"没有结果"场景3:我想用工具类处理数字场景4:泛型方法要求对象类型场景5:我想在同步代码块里用数字作为锁装箱与拆箱定义…...
GLM-4.1V-9B-Base部署教程:NVIDIA驱动版本兼容性验证与降级方案
GLM-4.1V-9B-Base部署教程:NVIDIA驱动版本兼容性验证与降级方案 1. 模型概述 GLM-4.1V-9B-Base是智谱开源的一款视觉多模态理解模型,专注于图像内容识别与分析任务。该模型具备以下核心能力: 图片内容描述与场景理解图像主体识别与定位颜色…...
SDMatte多风格抠图作品集:从商品白底图到艺术创意合成
SDMatte多风格抠图作品集:从商品白底图到艺术创意合成 1. 开篇:当抠图遇上AI 还记得那些年用Photoshop一点一点抠图的痛苦经历吗?边缘总是处理不干净,头发丝永远抠不完整,遇到复杂背景更是让人抓狂。现在,…...
基于Xinference-v1.17.1的嵌入式Linux开发指南
基于Xinference-v1.17.1的嵌入式Linux开发指南 1. 引言 嵌入式设备上的AI推理一直是个技术挑战,特别是在资源受限的环境中部署大模型。Xinference-v1.17.1作为一个开源推理框架,为嵌入式Linux系统提供了轻量级的AI模型部署方案。无论你是想在树莓派上运…...
【计算机网络工程论文】基于三层交换的局域网设计:连平中学教学楼VLAN划分与eNSP仿真应用
摘 要 随着连平中学发展和信息化平台的建设,面对庞大的信息数据和高要求的管理效率,网络的规划、管理、安全逐渐成为关键。对教学楼而言,规划一个高效、稳定、可扩展的局域网至关重要。 本文针对连平中学教学单位,鉴于其所有部门…...
医疗器械小白必看:B型、BF型、CF型设备到底怎么选?附真实医院案例解析
医疗器械采购指南:B型、BF型与CF型设备的实战选择策略 去年某三甲医院ICU因监护仪选型不当导致患者数据异常的事件,让医疗器械电气安全标准重新成为行业焦点。作为医疗设备采购人员,面对B型、BF型、CF型这些专业术语时,是否常感到…...
手把手教你:5分钟为你的静态网站嵌入AnythingLLM智能聊天机器人
5分钟为静态网站集成AnythingLLM智能聊天室的实战指南 你是否想过在自己的个人博客或产品官网上添加一个能回答访客问题的AI助手?就像那些科技公司官网右下角弹出的智能客服一样。今天我要分享的,是如何用AnythingLLM在5分钟内为任何静态网站嵌入一个私有…...
终极指南:3分钟掌握ControlNet-v1-1_fp16_safetensors高效AI图像控制
终极指南:3分钟掌握ControlNet-v1-1_fp16_safetensors高效AI图像控制 【免费下载链接】ControlNet-v1-1_fp16_safetensors 项目地址: https://ai.gitcode.com/hf_mirrors/comfyanonymous/ControlNet-v1-1_fp16_safetensors ControlNet-v1-1_fp16_safetensor…...
AI大模型进化地图:小白也能看懂的技术架构与未来趋势(收藏版)
本文深入剖析AI模型的技术架构、能力瓶颈及商业压力,揭示未来AI模型的四类形态:通用基础大模型、深度推理模型、边缘轻量模型和垂直领域专业模型。文章通过DeepSeek-R1和Google Gemini的案例,量化分析不同模型类型的业务逻辑差异,…...
ngx_http_join_exact_locations
1 定义 ngx_http_join_exact_locations 函数 定义在 ./nginx-1.24.0/src/http/ngx_http.cstatic ngx_int_t ngx_http_join_exact_locations(ngx_conf_t *cf, ngx_queue_t *locations) {ngx_queue_t *q, *x;ngx_http_location_queue_t *lq, *lx;q ngx_queue_he…...
