Python logging使用
目录
logging模块
logging核心组件
logger
handler
StreamHandler:把日志内容在控制台中输出
FileHandler:把日志内容写入到文件中
filter
formatter
注意日志级别的继承问题
logger.exception
上述样例的整体代码
日志的配置文件及其模板
logging模块
logging是Python的内置日志模块,用于生成程序日志。l
logging有五个日志级别,从低到高进行排序:DEBUG、INFO、WARMING、ERROR、CRITICAL。日志内容的记录只会记录当前设定等级及其以上的等级,例如级别为WARMING,日志的内容就只会记录WARMING、ERROR、CRITICAL,这三个级别的内容
logger默认的级别是warming
logging核心组件
logger(记录器):可以实例化多个记录器用于记录不同的日志要求
handler(处理器):可以定义多个处理器处理不同的日志保存或发送要求
filter(过滤器):可以对记录器的选择进行筛选
formatter(格式器):可以对日志的内容进行格式化要求
logger
logging.getLogger()
定义多个logger,通过不同的名字的来创建不同的looger
loggin.setLevel()
定义记录器的日志级别
first_logger = logging.getLogger(name='FirstLogger')
second_logger = logging.getLogger(name='SecondLogger')
second_logger.setLevel(logging.DEBUG)
print(f'first_logger:{first_logger}')
print(f'second_logger:{second_logger}')
handler
两个经常使用的handler
StreamHandler:把日志内容在控制台中输出
参数为None,也可选:
sys.stderr、 sys.stdout
stdout,stderr的中文名字分别是标准输入,标准输出和标准错误
stream_handler = logging.StreamHandler(stream=None)formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
first_logger.addHandler(stream_handler)
stream_handler.setFormatter(formatter)
first_logger.warning('warning text',)
FileHandler:把日志内容写入到文件中
3个主要参数,filename、mode、encoding、分别是文件名、写入模式、编码格式,大致跟一般的写入文件一致
file_handler = logging.FileHandler(filename='file_log',mode='a',encoding='utf-8')formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
first_logger.addHandler(file_handler)
file_handler.setFormatter(formatter)
first_logger.warning('warning text',)
filter
logging.Filter()
可以过滤使用不同的记录器,可以设置记录器的名字是否与过滤条件一致
例如
second_logger记录器的名字为【SecondLogger】, third_logger记录器的名字为【aabb.ccthird_logger】,而过滤器的格式为【aabb.cc'】
两个过滤器都是使用StreamHandler但是最终只有third_logger的日志内容被打印,因为只有third_logger的名字满足过滤器的条件
third_logger = logging.getLogger('aabb.ccthird_logger')
third_logger.warning('123')flt = logging.Filter('aabb.cc')
third_logger.addFilter(flt)
second_logger.addHandler(stream_handler)
second_logger.addFilter(flt)
second_logger.error('error text')
formatter
logging.Formatter()
可以设置不同日志内容格式,根据自身所需进行格式的规定
主要参数介绍
%(asctime)s:打印日志的时间
%(levelname)s:打印日志级别的名称
%(message)s:打印日志信息
%(filename)s:打印当前执行程序名
%(processName)s:打印线程名称
datefmt:指定时间的输出格式
formatter = logging.Formatter('======%(asctime)s - %(levelname)s - %(filename)s - %(message)s======',datefmt='%Y-%m-%d %H:%M')
注意日志级别的继承问题
没有指定日志级别,默认是WARMING
logger和handler都可以指定日志级别,最终已handler的为主,但是这里有一个点需要特别注意,
可能在指定日志级别会出现的问题,明明handler定义了DEBUG级别,可是输出时没有内容,这是因为如果logger没有指定级别,他会默认继承WARMING的最小级别,低于此级别的不会记录,所以要想设置handler的级别,建议最好先指定logger级别为DEBUG,再指定handler的级别
first_logger = logging.getLogger(name='FirstLogger')
# 没有设置logger的日志级别
# stream_handler.setLevel(logging.INFO)stream_handler = logging.StreamHandler(stream=sys.stdout)
stream_handler.setLevel(logging.DEBUG)
first_logger.debug('debug output')# 结果没有任何输出
设置完logger的日志级别后,才能输出对应的信息
logger.exception
如果只是使用logger.info等方式,不会记录过多的异常信息,但是使用logger.exception能够将详细的异常信息写入日志中去,其能将错误的类型,出错的位置进行记录,有助于项目调试
try:a = 3 / 0
except Exception as e:first_logger.exception(e)
上述样例的整体代码
import logging
import sysfirst_logger = logging.getLogger(name='FirstLogger')
second_logger = logging.getLogger(name='SecondLogger')
second_logger.setLevel(logging.DEBUG)
# print(f'first_logger:{first_logger}')
# print(f'second_logger:{second_logger}')stream_handler = logging.StreamHandler(stream=sys.stdout)
file_handler = logging.FileHandler(filename='file_log',mode='a',encoding='utf-8')formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
first_logger.addHandler(stream_handler)
stream_handler.setFormatter(formatter)
file_handler.setFormatter(formatter)
first_logger.warning('warning text',)third_logger = logging.getLogger('aabb.ccthird_logger')
third_logger.warning('123')flt = logging.Filter('aabb.cc')
third_logger.addFilter(flt)
second_logger.addHandler(stream_handler)
second_logger.addFilter(flt)
second_logger.error('error text')try:a = 3 / 0
except Exception as e:first_logger.exception(e)
日志的配置文件及其模板
可以参考我另外一篇博客,那里有详细介绍
Python logging 日志配置文件模板_gongzairen的博客-CSDN博客
相关文章:

Python logging使用
目录 logging模块 logging核心组件 logger handler StreamHandler:把日志内容在控制台中输出 FileHandler:把日志内容写入到文件中 filter formatter 注意日志级别的继承问题 logger.exception 上述样例的整体代码 日志的配置文件及其模板 lo…...
红黑树的实现原理和应用场景
红黑树的实现原理和应用场景; 有如图所示的表,现在希望查询的结果将列成行 建表语句如下: CREATE TABLE TEST_TB_GRADE2 ( ID int(10) NOT NULL AUTO_INCREMENT, USER_NAME varchar(20) DEFAULT NULL, CN_SCORE float DEFAULT NU…...

idea插件完成junit代码生成,和springboot代码示例
在idea环境下,可以用过插件的方式自动生成juint模板代码。不过具体要需要自己手动编写。 1、安装插件 打开idea,file–settings–plugins,搜索和安装插件(JunitGenerator V2.0和JUnit),安装后,后…...

【Redis面试点总结】
1、缓存 1.1、穿透 查询一个空数据,mysql也查不到也不会写入缓存可能导致多次请求数据库 方案一:缓存设空即可(可能发生数据不一致就是这条数据有了但此时缓存是空,消耗内存) 方案二:布隆过滤器&#x…...

打卡智能中国(五):博士都去哪儿了?
《打卡智能中国》系列更新了几期,有读者表示,很爱看这类接地气的真实故事,也有读者反映,不是电工,就是文员、农民、治沙人,人工智能不是高精尖学科吗?那些学历很高的博士都去哪儿了?…...

[Nacos] Nacos Client获取调用服务的提供者列表 (四)
文章目录 1.Nacos Client获取调用服务的提供者列表1.1 从Ribbon的负载均衡入手到Nacos Client获取调用服务的提高者列表1.2 getServers方法返回分析1.3 通过selectInstances方法查找Instances实例1.4 获取到要调用服务的serviceInfo Nacos Client 从Ribbon负载均衡调用服务。 …...
gcc编译一个程序的步骤(嵌入式学习)
1.预处理(Preprocessing): 在这个步骤中,预处理器将处理与#相关的代码,包括展开头文件、删除无用定义和替换宏定义。预处理器会生成一个经过宏替换和条件编译处理的中间文件。 gcc -E xxx.c -o xxx.i2.编译࿰…...

邹检验,结构变化识别及其R语言实现
在描述多维数据的维度关系时,线性模型无疑应用最多。然而某些情况下,我们关心随着时间变化或随着样本分组,线性关系的具体参数是否发生了变化,即是否发生结构变化Structural break。邹检验Chow test提供了最基本的一种结构变化显著…...

腾讯云,物联网开发平台产品,动态注册步骤
1. 下载后解压,qcloud_iot_mqtt_sign-master.zip GitHub - tencentyun/qcloud_iot_mqtt_signContribute to tencentyun/qcloud_iot_mqtt_sign development by creating an account on GitHub.https://github.com/tencentyun/qcloud_iot_mqtt_sign 2. 按照readme文…...

Padding, Spacer, Initializer 的使用
1. Padding 的使用 1.1 样式一 1) 实现 func testText1()-> some View{Text("Hello, World!").background(Color.yellow) // 背景颜色//.padding() // 默认间距.padding(.all, 10) // 所有的间距.padding(.leading, 20) // 开始的间距.ba…...

少儿编程 中国电子学会图形化编程等级考试Scratch编程四级真题解析(判断题)2023年3月
2023年3月scratch编程等级考试四级真题 判断题(共10题,每题2分,共20分) 11、在使用自定义积木时,不可以传递布尔型参数 答案:错 考点分析:考查自定义积木的使用,使用自定义积木的时候可以传递数字、文本和布尔型参数,所以错误 12、执行如下图程序后,输出的结果为“…...
Makefile学习笔记
目录 一、概述 1.1 Makefile 介绍 1.2规则 1.3核心 1.4示例 1.5定义命令 1.6 make是如何工作的 1.7、makefile中使用变量 1.8让make自动推导 1.9、另类风格的makefile 1.10、清空目标文件的规则 二、Makefile 总述 2.1、Makefile里有什么? 2.2、 mak…...
C++ 函数模板基础
文章目录 一、什么是函数模板二、函数模板的优点1、代码重用2、类型安全3、可读性4、泛型编程5、性能优化6、库开发 三、函数模板的使用场景1、通用操作2、数据结构与容器操作3、排序与查找算法4、数学与统计函数5、类型转换器6、自定义函数对象 四、模板参数的声明(…...
CUDA torch reinstall 与杂谈
一 实用技巧 1 从cuda11升级到12 apt-get --purge remove "cuda*" wget https://developer.download.nvidia.com/compute/cuda/12.1.1/local_installers/cuda_12.1.1_530.30.02_linux.run sh cuda_12.1.1_530.30.02_linux.run vim ~/.bashrc export PATH/usr/local…...
[230530] 托福TPO口语真题| TPO66~TPO72|XPO|Task1|20:30~21:00
目录 真题 预测题 真题 66. Do you agree or disagree with the following statement? Some people believe that a person needs a college education in order to have a successful career. Others believe that a college education is not necessary for…...

【FMC201】基于FMC标准的1路CameraLink Full 输入 子卡模块
产品概述 FMC201是一款CameraLink信号输入(采集)FMC子卡模块,该模块支持2路CameraLink Base模式或者1路CameraLink Full模式的图像信号输入。板卡具有2个CameraLink端口(SDR26),可以作为采集卡使用。 技术指…...

C语言_VS系列编译器写C语言或C++代码产生的一些错误与警告的解决方法(VS2010/VS2019)
本次来分享在用VS系列编译(VS2010/VS2019)写C语言或C代码时会遇到的一些警告和错误,提供博主的一些解决方法,若有更好的解决方法,大家也可以在评论区发表自己的意见噢,话不多说,开始上菜: 此博主在CSDN发布…...
从零实现一个数据库(DataBase) Go语言实现版 0.介绍
英文源地址 数据库实现步骤细分 1.持久化(Persistence) 我们为什么需要数据库?为什么不是直接把数据dump进文件中. 第一个话题就是持久化. 我们将讨论如果写入文件的过程中程序崩溃了, 或者电源断电了, 文件的状态会是什么样的呢? 文件是否只是丢失了最后一次写操作?或者…...

操作系统-X18 linux日志审计
Linux日志审计 在unix/类unix(Linux)系统中,日志是内核(内存)的一部分。 用于记录系统、程序运行中发生的各种事件 通过阅读日志,有助于诊断和解决系统故障 日志文件的分类 ①内核及系统日志 由系统sysl…...
【Vue工程】011-Axios
【Vue工程】011-Axios 文章目录 【Vue工程】011-Axios一、概述1、简介2、官网3、訾博其他相关博客【axios】001-axios概述、特点、文档说明【axios】002-axios发起请求axios封装 二、基本使用1、安装2、创建一个 token 状态3、axios 封装4、使用示例设置 baseURL请求调用拦截器…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...

热门Chrome扩展程序存在明文传输风险,用户隐私安全受威胁
赛门铁克威胁猎手团队最新报告披露,数款拥有数百万活跃用户的Chrome扩展程序正在通过未加密的HTTP连接静默泄露用户敏感数据,严重威胁用户隐私安全。 知名扩展程序存在明文传输风险 尽管宣称提供安全浏览、数据分析或便捷界面等功能,但SEMR…...

【免费数据】2005-2019年我国272个地级市的旅游竞争力多指标数据(33个指标)
旅游业是一个城市的重要产业构成。旅游竞争力是一个城市竞争力的重要构成部分。一个城市的旅游竞争力反映了其在旅游市场竞争中的比较优势。 今日我们分享的是2005-2019年我国272个地级市的旅游竞争力多指标数据!该数据集源自2025年4月发表于《地理学报》的论文成果…...
ArcPy扩展模块的使用(3)
管理工程项目 arcpy.mp模块允许用户管理布局、地图、报表、文件夹连接、视图等工程项目。例如,可以更新、修复或替换图层数据源,修改图层的符号系统,甚至自动在线执行共享要托管在组织中的工程项。 以下代码展示了如何更新图层的数据源&…...