给 Python 入口函数加可选 logger,兼容被调用与独立运行
工具函数既可能 python app.py 单独跑,也可能被调度器/其他脚本 import。把 logger 做成可选参数最省事。
推荐结构
import logging
def setup_logging() -> logging.Logger:
logging.basicConfig(level=logging.INFO, format="%(asctime)s %(levelname)s %(name)s: %(message)s")
return logging.getLogger("MainScriptLogger")
def main(logger: logging.Logger | None = None) -> None:
if logger is None:
logger = logging.getLogger("MainScriptLogger")
if not logger.handlers:
logger = setup_logging()
logger.info("脚本开始执行")
try:
...
logger.info("脚本执行完成")
except Exception:
logger.exception("脚本执行失败")
raise
if __name__ == "__main__":
main(setup_logging())
好处
- 被 import 时不强迫写日志到本地文件
- 独立运行时仍有完整日志
- 调度方可以注入带任务 ID 的 logger,便于串联链路
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 HT Notes