【Python 工具人快餐 · 第 6 份】
开袋即食
logging 把「写屏 + 写文件 + 分级」封装成 3 行配置:
• DEBUG / INFO / WARNING / ERROR / CRITICAL 五级过滤
• 支持同时输出到控制台 + 文件,还带时间戳
• 线程安全,多进程也能用
1 行配置 3 连发
import logging, syslogging.basicConfig(level=logging.INFO,format="%(asctime)s [%(levelname)s] %(message)s",handlers=[logging.FileHandler("app.log"),logging.StreamHandler(sys.stdout)])
场景实拍:脚本运行日志自动落盘
需求:脚本每次跑都把 INFO 以上日志写到 app.log
,并在终端实时可见。
import logging, requestslogging.info("开始抓取...")
try:r = requests.get("https://example.com", timeout=5)r.raise_for_status()logging.info("抓取成功,长度 %d", len(r.text))
except Exception as e:logging.error("抓取失败:%s", e)
跑完后查看 app.log
:
2024-06-01 21:10:01 [INFO] 开始抓取...
2024-06-01 21:10:02 [INFO] 抓取成功,长度 1250
升级加料
- 按大小切割:
from logging.handlers import RotatingFileHandler
- 按日期切割:
TimedRotatingFileHandler
- JSON 日志:
python-json-logger
一行换 formatter
打包带走
脚本上线前,先把 print
换成 logging.info
,
老板要看日志,直接丢 app.log
,优雅!