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源码,

相关推荐
kkeeper~14 小时前
0基础C语言积跬步之深入理解指针(5下)
c语言·开发语言
一直不明飞行14 小时前
Java的equals(),hashCode()应该在什么时候重写
java·开发语言·jvm
2301_8039346115 小时前
Go语言如何做网络爬虫_Go语言爬虫开发教程【指南】
jvm·数据库·python
WL_Aurora15 小时前
Python爬虫实战(六):新发地蔬菜价格数据采集.
爬虫·python
盲敲代码的阿豪15 小时前
Python 入门基础教程(爬虫前置版)
开发语言·爬虫·python
basketball61615 小时前
C++ 构造函数完全指南:从入门到进阶
java·开发语言·c++
互联科技报15 小时前
2026超融合选型:Top5品牌与市场格局解读
开发语言·perl
weixin1997010801615 小时前
[特殊字符] 智能数据采集:数字化转型的“数据石油勘探队”(附Python实战源码)
开发语言·python
想唱rap16 小时前
IO多路转接之poll
服务器·开发语言·数据库·c++
@杰克成16 小时前
Java学习30
java·开发语言·学习