4 道练习题·预计 30 分钟·做对一题解锁下一段
各位写代码时,是不是几乎都干过这种事——
代码跑出问题了,怎么办?随手在可疑位置插一行 print('xxx'),再跑一次。然后再插一行 print('yyy'),再跑。最后整个文件里散落着十几个 print('111')、print('here')、print(user),bug 修好之后忘了删。
本地玩玩还能凑合,可一旦把代码部署到服务器,问题就来了:
「线上挂了,咋回事?」打开服务器一看,啥都没有。
Python 标准库里早就备好了答案——logging。一行不长的代码,就能让输出自带「时间戳 + 级别 + 模块名」,还能同时写到控制台、文件、远程服务器,并且可以一键切换「调试时啥都打、上线后只打 ERROR」。
这一节就从最简单的 logging.info('hi') 开始。
最简单的写法只有两行:
import logging
logging.info("两点水开始打卡了")跑一下——啥都没输出。
这是新手第一次用 logging 几乎都会踩的坑。原因是:logging 默认级别是 WARNING,比它低的 INFO 和 DEBUG 直接被丢掉了。
把上面那行换成 logging.warning(...) 再跑:
import logging
logging.warning("两点水忘了打卡")终于看到输出:
WARNING:root:两点水忘了打卡
注意这一行的格式:级别 + logger 名字 + 内容,三段式。root 是默认 logger 的名字。
要让 INFO 也打出来,先调一行 basicConfig:
import logging
logging.basicConfig(level=logging.INFO)
logging.info("两点水开始打卡了")输出:
INFO:root:两点水开始打卡了
basicConfig(level=logging.INFO) 把 root logger 的级别调成 INFO——INFO 及以上都会被打出来。
⚠️ 「为什么默认是 WARNING?」官方解释:
logging是给「库的作者」准备的,库要是默认就打一堆 INFO 会污染最终用户的输出。所以默认只打「值得用户注意」的 WARNING 及以上。
用 logging.basicConfig 把日志级别调到 INFO,再用 logging.info 打印 '第一条日志'。
注意:starterCode 已经把 logging 配置成输出到 stdout 并使用 format='%(levelname)s:%(message)s' 简化格式,你只需写最后一行 logging.info(...)。
输出应该是:
INFO:第一条日志