Python 中 logging 的 setlevel 函数未生效

news/2024/12/29 5:38:56/

参考自:

  1. python 中logger setlevel没有生效
  2. logging — Python 的日志记录工具

问题分析

在官方文档中,对于 setLevel 的解释为:

setLevel(level)
给记录器设置阈值为 level 。日志等级小于 level 会被忽略。严重性为 level 或更高的日志消息将由该记录器的任何一个或多个处理器发出,除非将处理器的级别设置为比 level 更高的级别。
创建记录器时,级别默认设置为 NOTSET (当记录器是根记录器时,将处理所有消息;如果记录器不是根记录器,则将委托给父级)。请注意,根记录器的默认级别为 WARNING 。
委派给父级的意思是如果一个记录器的级别设置为 NOTSET,将遍历其祖先记录器,直到找到级别不是 NOTSET 的记录器,或者到根记录器为止。
如果发现某个父级的级别不是 NOTSET ,那么该父级的级别将被视为发起搜索的记录器的有效级别,并用于确定如何处理日志事件。
如果搜索到达根记录器,并且其级别为 NOTSET,则将处理所有消息。否则,将使用根记录器的级别作为有效级别。

即在 logging 中,logger 本身的 level 等级优先于其处理器 level 等级,且 Logger’s level 的默认等级一般为 warning

所以虽然在handler中setlervel了,但如果 Logger’s level 高于 Handler’s Level ,则低于 Logger’s level 的日志仍会被丢弃

解决方式

在设置处理器级别之前先进行记录器级别的设置
eg: logger.setLevel(logging.DEBUG)

import logging# log 配置
logger = logging.getLogger('记录器命名')
# 设置记录器等级,以防丢弃下方处理器需要的日志
logger.setLevel(logging.DEBUG)# warning 及以上日志等级会被上传到终端输出
c_handler = logging.StreamHandler()
c_handler.setLevel(logging.WARNING)
c_format = logging.Formatter('%(asctime)s - %(module)s, %(lineno)s - %(levelname)s: %(message)s')
c_handler.setFormatter(c_format)
logger.addHandler(c_handler)# debug 及以上日志等级会被写入到日志文件
f_handler = logging.FileHandler('SecTracy.log')
f_handler.setLevel(logging.DEBUG)
f_format = logging.Formatter('%(asctime)s - %(module)s, %(lineno)s - %(levelname)s: %(message)s')
f_handler.setFormatter(f_format)
logger.addHandler(f_handler)

http://www.ppmy.cn/news/41134.html

相关文章

OpenCV实战——尺度不变特征检测器

OpenCV实战——尺度不变特征检测器 0. 前言1. SURF 特征检测器2. SIFT 特征检测算法3. 完整代码相关链接0. 前言 特征检测的不变性是一个重要概念,虽然方向不变性(即使图像旋转也能检测到相同特征点)能够被简单特征点检测器(例如 FAST 特征检测器等)处理,但难以实现在图像尺…

代码随想录算法训练营第四十六天-动态规划8|139.单词拆分,(多重背包了解)

单词拆分这道题,我的思路是字符串看做背包容量,单词作为物品,字符串由单词组成,并且单词可以重复使用,因此可以看做是一道完全背包。这时候需要考虑dp[]的含义了。题目问的是字符串能否由单词构成,所以把dp…

最新CAMx-Python融合技术应用与大气污染来源解析方法应用

随着我国经济快速发展,我国面临着日益严重的大气污染问题。大气污染是工农业生产、生活、交通、城市化等方面人为活动的综合结果,同时气象因素是控制大气污染的关键自然因素。大气污染问题既是局部、当地的,也是区域的,甚至是全球…

创建者模式-简单/工厂/抽象工厂-解决简单对象创建问题

创建者模式-简单/工厂/抽象工厂-解决简单对象创建问题创建型模式简单工厂(Simple Factory)解决简单对象创建问题描述适用环境优点:缺点:违反原则代码实现工厂方法(Factory Method)解决产品对象创建问题描述…

深入了解Android蓝牙Bluetooth【基础+进阶】

基础篇 什么是蓝牙? 也可以说是蓝牙技术。所谓蓝牙(Bluetooth)技术,实际上是一种短距离无线电技术,是由爱立信公司公司发明的。利用“蓝牙”技术,能够有效地简化掌上电脑、笔记本电脑和移动电话手机等移动通信终端设备之间的通信…

Springboot集成neo4j实现知识图谱关系图

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、neo4j是什么?二、安装步骤1.启动2.使用2.简单命令二、使用springboot集成neo4j1.引入依赖2.功能实现3.查询关系节点4. 查询指定评委和指定选手中…

适配器设计模式

目录 前言: 适配器原理与实现 适配器模式的应用场景 1.封装有缺陷的接口 2.统一多个类的接口设计 3.替换依赖的外部系统 4.兼容老版本接口 5.适配不同格式的数据 代理、桥接、装饰器、适配器 4 种设计模式的区别 参考资料 前言: 适配器模式这个模…

Ae:表达式应用基础

通过几个最常用的变量及函数(方法)来了解 Ae 表达式。有关表达式语言语法基础,请参阅:《Ae:表达式语法基础》◆ ◆ ◆时间相关time返回合成的当前时间值,以秒为单位。比如,当处于 1 秒的时间点…