我自己早期也是这样:全靠 print 调试,结果客户报问题时根本看不到当时的输出。
正经做法是用 logging:
import logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s [%(levelname)s] %(name)s: %(message)s',
handlers=[
logging.FileHandler('app.log', encoding='utf-8'),
logging.StreamHandler()
]
)
logger = logging.getLogger(__name__)
|
五个级别:
- DEBUG:调试用,生产关闭
- INFO:流程节点("开始爬取第 X 页")
- WARNING:可恢复的异常
- ERROR:某个功能失败
- CRITICAL:整个系统挂了
实战经验:
- 每个模块一个 logger
- 关键节点(开始/结束/异常)必须记日志
- 日志带上下文(job_id、user_id),查问题时救命
- 日志要轮转,不然 1 个月 100GB,常见做法用
logging.handlers.RotatingFileHandler
客户问「上次跑成啥样」,直接发 log,比任何解释都管用。
本文由 BBZ · 小朵科技工作室 出品。