logging模块-python

一、参考

官方文档、链接,帮助文档:help(logging),源码

二、类

职责 关键方法/属性
Logger 日志入口,接收日志请求,决定是否处理 .debug(), .info(), .addHandler(), .setLevel()
Handler 决定日志输出到哪里(控制台/文件/网络等) .emit(record), .setFormatter(), .setLevel()
Formatter 定义日志文本格式 .format(record)
Filter 过滤特定日志(可选) .filter(record)

三、数据流向

从上图可以看出,Logger必须绑定Handler才能正常输出消息。

四、委托机制

委派给父级的意思是如果一个记录器的级别设置为 NOTSET(就是没有设置日志级别),将遍历其祖先记录器,直到找到级别不是 NOTSET 的记录器,或者到根记录器为止。然后根据该祖先记录器的级别,判断是否输出日志。

五、常用场景

5.1、直接设置root记录器

python 复制代码
import logging

# basicConfig 本质就是配置 root logger
logging.basicConfig(
    level=logging.WARNING,
    format='%(name)s - %(levelname)s - %(message)s - %(asctime)s'
)

logging.warning("This will show")

5.2、单独设置记录器对象

python 复制代码
import logging

# 1. 创建 Logger
logger = logging.getLogger('myapp')
logger.setLevel(logging.DEBUG)

# 2. 创建 Handler
console_handler = logging.StreamHandler()
file_handler = logging.FileHandler('app.log')

# 3. 设置 Handler 级别
console_handler.setLevel(logging.WARNING)
file_handler.setLevel(logging.DEBUG)

# 4. 创建 Formatter
simple_fmt = logging.Formatter('%(levelname)s - %(message)s')
detailed_fmt = logging.Formatter(
    '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)

# 5. 绑定 Formatter 到 Handler
console_handler.setFormatter(simple_fmt)
file_handler.setFormatter(detailed_fmt)

# 6. 将 Handler 添加到 Logger
logger.addHandler(console_handler)
logger.addHandler(file_handler)

# 7. 记录日志
logger.debug("Debug info")     # 只写入文件
logger.warning("Warning!")     # 控制台 + 文件

六、Formatter的格式记不住

点击进入Formatter源码,

相关推荐
小狗丹尼40040 分钟前
JSON 基础认知、数据转换与 Flask 前后端交互全解
python·flask·json
1104.北光c°1 小时前
滑动窗口HotKey探测机制:让你的缓存TTL更智能
java·开发语言·笔记·程序人生·算法·滑动窗口·hotkey
for_ever_love__2 小时前
Objective-C学习 NSSet 和 NSMutableSet 功能详解
开发语言·学习·ios·objective-c
zm-v-159304339863 小时前
Python 数据挖掘从入门到精通:回归 / 分类 / 聚类 / 关联分析完整教程
python·数据挖掘·回归
似水明俊德8 小时前
02-C#.Net-反射-面试题
开发语言·面试·职场和发展·c#·.net
qq_417695058 小时前
机器学习与人工智能
jvm·数据库·python
漫随流水8 小时前
旅游推荐系统(view.py)
前端·数据库·python·旅游
Thera7779 小时前
C++ 高性能时间轮定时器:从单例设计到 Linux timerfd 深度优化
linux·开发语言·c++
yy我不解释9 小时前
关于comfyui的mmaudio音频生成插件时时间不一致问题(一)
python·ai作画·音视频·comfyui
炘爚9 小时前
C语言(文件操作)
c语言·开发语言