Python 的 logging 比 print 更安全,因其分离输出内容与目标、支持分级控制(DEBUG 到 CRITICAL)、多目标输出(文件/邮件/网络等)、线程安全及格式化上下文(时间、模块、行号、线程 ID 等),而 print 仅简单输出至 stdout,无级别、无目标控制、非线程安全、格式不统一。
Python 的
比
更安全,核心在于它把“输出什么”和“输出到哪儿、何时输出”彻底分开,支持分级控制、多目标输出、线程安全和运行时动态调整——而
只是简单往 stdout 写字符串,一旦上线或并发场景下就容易失控。
支持日志级别控制,避免敏感信息泄露
提供
、
、
、
、
五级,默认只显示
及以上。开发时可设为
查细节,生产环境一键调成
,自动过滤掉调试用的敏感变量(比如密码、token、完整 traceback)。
没有级别概念,所有语句都无差别输出,上线前若漏删调试
,可能直接把数据库连接串打到控制台或日志文件里。
可配置输出目标,不污染标准输出
允许同时写入多个 handler:文件、syslog、网络服务、甚至自定义目标。你能让
日志发邮件,
写进
,调试信息仅输出到终端——互不干扰。
立即学习
“
Python免费学习笔记(深入)
”;
固定输出到
,和用户提示、脚本管道、容器日志收集器混在一起,既难过滤,也影响自动化解析(比如
会漏掉没加标签的
)。
Python 3.14.3
微软官方的 Python 扩展,是 VS Code 安装量最高的扩展(209M+)。集成 IntelliSense(通过 Pylance)、调试(通过 Python Debugger)、代码检查、格式化、重构和单元测试等功能。支持 Jupyter Notebook、虚拟环境管理和多 Python 版本切换。
下载
线程/进程安全,适合真实服务场景
的 handler 默认是线程安全的(如
加锁),多线程写同一个日志文件不会内容错乱。配合
+
还能异步落盘,避免阻塞主线程。
不是原子操作:两个线程同时
,可能输出
或更乱的交错结果,尤其在高并发 Web 服务中极易出现日志拼接错误,排查时根本分不清哪行属于哪个请求。
格式统一、上下文丰富,便于追踪问题
通过
,一条日志能自动包含时间戳、模块名、函数名、行号、进程/线程 ID、甚至 request ID。例如:
[2024-05-20 14:22:03,128] ERROR in api.py:fetch_user:147 — User 123 not found (pid=1234, tid=1402)
而
需手动拼、易出错、无法全局统一,且拿不到线程 ID 等关键上下文。
loggingprintprintloggingDEBUGINFOWARNINGERRORCRITICALWARNINGDEBUGERRORprintprintloggingERRORINFOapp.logprintsys.stdoutgrep "ERROR"print("failed")loggingFileHandlerQueueHandlerQueueListenerprintprint("A"); print("B")A\nB\nA\nBFormatterprint(f"Error: {e} at line {sys._getframe().f_lineno}")