create_logger.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. # 【启动 S1】导入本模块时,文件末尾会调用 setup_logger 创建全局 logger。
  2. # 日志仅记录执行过程;出现“调用成功”等文本仍需结合真实返回内容判断业务结果。
  3. """
  4. 需求:为SmartBizTrip项目创建和配置日志记录器
  5. 思路步骤:
  6. 1. 导入必要的模块(logging、os、Config)
  7. 2. 定义setup_logger函数配置日志记录器
  8. 3. 创建日志文件夹(如果不存在)
  9. 4. 获取并配置日志记录器(设置级别、防止重复输出)
  10. 5. 定义日志格式
  11. 6. 创建控制台处理器(输出INFO级别日志)
  12. 7. 创建文件处理器(输出DEBUG级别日志)
  13. 8. 将处理器添加到日志记录器中(避免重复添加)
  14. 9. 初始化并返回配置好的日志记录器
  15. 10. 创建项目的全局日志记录器实例
  16. """
  17. import logging
  18. import os
  19. from config import Config
  20. def setup_logger(name, log_file='logs/app.log'):
  21. # 创建日志文件夹
  22. # 【日志内部步骤 1】确保日志目录存在,再取得同名 logger 并设置日志级别。
  23. # 输入 name 用于区分日志来源,log_file 指定文件位置;输出配置好的 logging.Logger。
  24. # 调用方以后用 logger.info/debug/error 写日志时,不必每次重新创建文件处理器。
  25. # 先取日志文件的目录再创建;exist_ok=True 允许目录已经存在,不会因此报错。
  26. os.makedirs(os.path.dirname(log_file), exist_ok=True)
  27. # 获取日志记录器
  28. logger = logging.getLogger(name)
  29. logger.setLevel(logging.DEBUG)
  30. # 防止重复输出的关键!
  31. # 禁止把消息继续传给更上层 logger,避免本 logger 已输出后,根 logger 又输出同一条。
  32. logger.propagate = False
  33. # 定义日志格式
  34. # 格式串里的 name/asctime/levelname/message 由 logging 在写每条记录时填入。
  35. formatter = logging.Formatter('%(name)s - %(asctime)s - %(levelname)s - %(message)s')
  36. # 创建控制台处理器
  37. # 【日志内部步骤 2】控制台处理器接收 INFO 及以上级别;日志文件处理器接收 DEBUG 及以上级别。
  38. console_handler = logging.StreamHandler()
  39. console_handler.setFormatter(formatter)
  40. console_handler.setLevel(logging.INFO) # 消息先通过 logger 级别筛选,再通过 handler 级别筛选
  41. # 创建文件处理器
  42. # mode="a" 表示追加到现有日志,encoding="utf-8" 用于保存中文;不是每次启动清空文件。
  43. file_handler = logging.FileHandler(filename=log_file, encoding="utf-8", mode="a")
  44. file_handler.setFormatter(formatter)
  45. file_handler.setLevel(logging.DEBUG)
  46. # 将处理器添加到日志记录器中
  47. # 【日志内部步骤 3】仅在没有处理器时挂载,避免同一条日志重复输出到多个相同处理器。
  48. if not logger.handlers: # 先进行判断,再进行添加。避免重复添加处理器
  49. logger.addHandler(console_handler)
  50. logger.addHandler(file_handler)
  51. return logger
  52. logger = setup_logger('SmartBizTrip', Config().log_file)