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请求调用拦截器…...
从怀疑到真香!2026我日常办公离不开的这款在线文字转换器太好用了
刚入职那半年我踩过太多坑:一周三次新人培训,怕漏记知识点全程录音,下课手动整理1小时录音要熬3小时,知识点散得根本没法复习;部门周会做完记录,散会就要我出整理好的纪要,赶工赶得饭都吃不上&a…...
DeepSeek RAG系统渗透测试全链路复现(含PoC代码与防御加固清单)
更多请点击: https://kaifayun.com 第一章:DeepSeek RAG系统渗透测试全链路复现概览 DeepSeek RAG系统作为面向企业级知识检索增强生成的典型架构,其安全边界不仅涵盖LLM服务层,更延伸至向量数据库、检索代理、提示工程网关及外部…...
Taurus多执行器对比实战:JMeter/Gatling/Locust统一压测方案
1. 为什么选Taurus做多执行器对比——不是为了炫技,而是为了少踩坑在性能测试领域,我见过太多团队卡在“选型”这一步:刚招来一个会写JMeter脚本的工程师,项目突然要压测WebSocket接口,发现JMeter原生支持弱、插件维护…...
如何从零构建智能FOC轮腿机器人:完整开源硬件系统终极指南
如何从零构建智能FOC轮腿机器人:完整开源硬件系统终极指南 【免费下载链接】foc-wheel-legged-robot Open source materials for a novel structured legged robot, including mechanical design, electronic design, algorithm simulation, and software developme…...
解决Claude Code Token不足问题并享受Taotoken活动价
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 解决Claude Code Token不足问题并享受Taotoken活动价 应用场景类,聚焦于使用Claude Code时遇到Token配额紧张的开发者&…...
MySQL GROUP BY 原理与优化
我刚工作的时候,有次统计每个用户的订单总金额,写了 SELECT user_id, SUM(amount) FROM orders GROUP BY user_id,结果执行了 60 秒还没出结果。DBA 帮我一看执行计划,发现没走索引,导致 Using temporary(用…...
第三卷第4章:原型模式设计思想
第三卷第4章:原型模式设计思想 目录介绍 01.案例引入与思考 1.1 痛点场景 1.2 它哪里不舒服 1.3 引出本篇主角 02.原型模式介绍 2.1 原型模式由来 2.2 原型模式定义...
保姆级避坑指南:在Ubuntu 22.04上搞定ROS2 Humble、PX4与Gazebo的联合仿真(附Empy版本降级)
保姆级避坑指南:Ubuntu 22.04下ROS2 Humble与PX4联合仿真的21个关键陷阱当你在Ubuntu 22.04上第一次尝试搭建ROS2 Humble、PX4与Gazebo的联合仿真环境时,可能会遇到比预期更多的挑战。这不是一个简单的"复制粘贴命令就能完成"的任务——版本冲…...
国内大学生常用的AI写作辅助平台有哪些?
国内高校学生常用的 AI 写作辅助平台,以本土化全流程工具为主,结合通用大模型与专项功能模块,覆盖选题构思、大纲搭建、初稿撰写、语言润色、降重处理、查重检测及格式排版等关键环节,以下是主流平台详解与对比: 一、本…...
学习日志(三)【php语法学习,iscc校赛wp】
1. 任务 1.1.1.1.1.1. 知识部分 rce看【之前的笔记?】php的知识点学习继续jwt token好像是比赛的题目考察内容,我看看php伪协议 1.1.1.1.1.2. 题目 参加iscc比赛【五一】rce题目 1.1.1.1.1.3. 环境配置 把vscode搞好,上学期没有把Php配…...
