0

0

Python 日志级别的设计与使用建议

冰川箭仙

冰川箭仙

发布时间:2026-01-29 15:05:19

|

810人浏览过

|

来源于php中文网

原创

DEBUG日志生产环境默认不可见,因根logger默认级别为WARNING,低于该级的日志被直接丢弃;需同时设置logger和handler的level才能生效。

python 日志级别的设计与使用建议

为什么 DEBUG 日志在生产环境默认看不到

因为 Python 的 logging 模块默认根 logger 级别是 WARNING,所有低于该级别的日志(DEBUGINFO)会被直接丢弃,不经过 handler。这不是配置错误,而是设计使然——避免开发期日志污染生产输出。

常见误操作是只改了 handler 的 level(比如给 StreamHandler 设置 setLevel(logging.DEBUG)),却忘了同时调高 logger 本身的 level:

logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)  # ← 这行必须有
handler = logging.StreamHandler()
handler.setLevel(logging.DEBUG)
logger.addHandler(handler)
  • logger 和 handler 的 level 是“双重过滤”:日志先过 logger 级别,再过 handler 级别
  • 若用 basicConfig(),它只设置根 logger 和默认 handler,但不会覆盖已存在的 logger 配置
  • 第三方库(如 requests、urllib3)也用 logging,它们的 logger 默认继承根级别,所以开 DEBUG 后可能刷出大量底层请求细节

INFOWARNING 的边界怎么划

关键不是“严重程度”,而是“是否需要人关注”。INFO 应描述可预期的正常流程节点(如服务启动、定时任务开始、API 成功返回),而 WARNING 表示发生了异常但未中断流程(如降级启用、缓存失效、字段缺失但有兜底)。

  • 不要把参数校验失败打成 INFO,那是业务异常,至少 WARNING;如果影响下游,应 ERROR
  • 数据库连接重试第 1 次失败 → WARNING;重试 3 次全失败 → ERROR
  • 用户主动触发的导出任务完成 → INFO;后台定时同步失败 → WARNING(因为没人盯着看)

自定义日志级别真的有必要吗

绝大多数项目不需要。Python 支持用 logging.addLevelName() 注册新级别(如 TRACE),但会带来三个实际问题:

立即学习Python免费学习笔记(深入)”;

YIXUNCMS中秋专版2.0.4
YIXUNCMS中秋专版2.0.4

系统介绍:YIXUNCMS中专专版是易迅软件工作室在中秋节来临之即推出的专题模板建站系统,使用增强版后台管控系统,板板设计符合节日特点。易迅软件工作室恭祝全国人民中秋快乐。特别提示:由于网站页面的不同设计,部分后台功能未在前端进行体现。系统特点:1、采用目前流行的PHP语言编写,底层采用超轻量级框架作为系统支撑;2、页面布局使用DIV+CSS技术,遵循WEB标准,及大提高页面的浏览速度;3、使用应

下载
  • 日志分析工具(ELK、Sentry)通常只识别标准五级,自定义级别可能被忽略或归为 UNKNOWN
  • 团队协作成本上升:新人得查文档才知道 TRACEDEBUG 更细,且含义是否和你一致
  • filterFormatterHandler 的逻辑都要额外适配,容易漏掉某处判断

更轻量的做法是用 DEBUG + 结构化字段区分粒度:logger.debug("cache hit", extra={"subsystem": "redis", "trace_id": tid}),再通过日志平台的字段过滤替代级别膨胀。

为什么 ERROR 日志里经常缺 traceback

因为直接写 logger.error("failed to process") 不会自动捕获异常上下文。必须显式传入 exc_info=True 或使用 logger.exception()(它是 error(..., exc_info=True) 的语法糖)。

try:
    risky_call()
except ValueError as e:
    logger.error("value error occurred", exc_info=True)  # ← 正确
    # 或等价写法:
    # logger.exception("value error occurred")
  • logger.error("msg", exc_info=e) 也可以,但 e 必须是 Exception 实例,不能是字符串
  • 在 except 块外想记录最近一次异常?用 sys.exc_info(),但注意它只在异常处理上下文中可靠
  • 异步场景(如 asyncio)中,未被 await 的协程抛出的异常可能丢失 traceback,需配合 loop.set_exception_handler

日志级别本身不难配,难的是让每条日志在出问题时真能帮上忙——这意味着要时刻想着“谁会看这条日志?他需要什么信息才能快速定位?”而不是仅仅填满 level 字段。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

228

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

297

2023.10.25

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

298

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

212

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1502

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

624

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

633

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

589

2024.04.29

java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

1

2026.01.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.4万人学习

Django 教程
Django 教程

共28课时 | 3.6万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号