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

相关推荐
依然鸣1 分钟前
PTA团体程序设计天梯赛L2真题讲解L2-005-008
开发语言·数据结构·c++·算法·深度优先·pat考试·图论
EXI-小洲21 分钟前
Web Spider 某渣渣企业平台 表单参数逆向 Webpack
python·webpack·js逆向·spider
君顾125 分钟前
代驾跑腿业务系统实战开发指南
java·开发语言·代驾跑腿
夏幻灵43 分钟前
从语法坑点到 JS 内存底层:Vue 3 watch 侦听器深度全解
开发语言·javascript·vue.js
玫幽倩1 小时前
2026聚合獬豸杯决赛wp(手机取证)
python·电子取证·misc·取证·聚合·手机取证·獬豸杯
FlyWIHTSKY1 小时前
在智能体系统中,什么是多模态,举例详细说明
人工智能·python·langchain
k4m7v2pz1 小时前
Rust 长跑守护进程日志治理:切分、时区与结构化
开发语言·后端·rust·日志系统·日志轮转·ndjson
FfHUCisI1 小时前
Golang RESTful API 设计原则
开发语言·golang·restful
breeze jiang1 小时前
ESLint flat config 配置实战:五大字段、规则严重级别与 --fix 能力边界详解
开发语言·前端·javascript
weixin_307779132 小时前
PHP 大文件上传:内存占用、超时与最佳实践
linux·服务器·开发语言·nginx·php