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

相关推荐
用户8356290780513 小时前
Python 自动拆分 Word 文档教程:按分节符与分页符处理
后端·python
十五年专注C++开发3 小时前
Oat++: 一个轻量级、高性能、零依赖的 C++ Web 框架
开发语言·c++·web服务·oatpp
陈天伟教授3 小时前
心电心音同步分析-案例:原型设计一
开发语言·人工智能·python·语言模型·架构
我的xiaodoujiao3 小时前
API 接口自动化测试详细图文教程学习系列9--Requests模块
python·学习·测试工具·pytest
Allen_LVyingbo3 小时前
量子计算Dirac Notation基本教学—从零基础到读懂量子信息论文(下)
开发语言·人工智能·python·数学建模·量子计算
wjs20244 小时前
Ruby File 类和方法
开发语言
xyq20244 小时前
API 类别 - UI 核心
开发语言
Dxy12393102164 小时前
Python路径算法简介
开发语言·python·算法
文慧的科技江湖4 小时前
光储充协同的终极闭环:用SpringCloud微服务打造“发-储-充-用“智能能源网络 - 慧知开源充电桩管理平台
java·开发语言·spring cloud·微服务·能源·充电桩开源平台·慧知重卡开源充电桩平台
東雪木4 小时前
Java学习——内部类(成员内部类、静态内部类、局部内部类、匿名内部类)的用法与底层实现
java·开发语言·学习·java面试