logger.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. """
  2. 统一日志工具模块
  3. 使用loguru实现按天生成日志文件,统一项目日志格式
  4. """
  5. import sys
  6. from pathlib import Path
  7. from loguru import logger
  8. from config.config.settings import config
  9. # 全局logger实例
  10. _global_logger = None
  11. def setup_logger(name='robot_ai', log_dir='logs'):
  12. """
  13. 设置统一的日志记录器
  14. Args:
  15. name: 日志记录器名称
  16. log_dir: 日志文件目录
  17. Returns:
  18. logger: 配置好的日志记录器
  19. """
  20. global _global_logger
  21. # 创建日志目录
  22. log_path = Path(log_dir)
  23. log_path.mkdir(exist_ok=True)
  24. # 移除默认的处理器
  25. logger.remove()
  26. # 添加控制台处理器
  27. logger.add(
  28. sys.stdout,
  29. format="<green>{time:YYYY-MM-DD HH:mm:ss.SSS}</green> | <level>{level: <8}</level> | <cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> - <level>{message}</level>",
  30. level=config.LOG_LEVEL,
  31. colorize=True
  32. )
  33. # 添加文件处理器(按天轮转)
  34. log_file = log_path / f"{name}.log"
  35. logger.add(
  36. log_file,
  37. format="{time:YYYY-MM-DD HH:mm:ss.SSS} | {level: <8} | {name}:{function}:{line} - {message}",
  38. level=config.LOG_LEVEL,
  39. rotation="00:00", # 每天午夜轮转
  40. retention="30 days", # 保留30天
  41. compression="zip", # 压缩旧日志
  42. encoding="utf-8",
  43. enqueue=True # 异步写入
  44. )
  45. _global_logger = logger
  46. return logger
  47. def get_logger(name=None):
  48. """
  49. 获取日志记录器
  50. Args:
  51. name: 模块名称,如果为None则使用调用模块的名称
  52. Returns:
  53. logger: 日志记录器
  54. """
  55. if name is None:
  56. # 获取调用模块的名称
  57. import inspect
  58. frame = inspect.currentframe().f_back
  59. name = frame.f_globals.get('__name__', 'robot_ai')
  60. # 如果还没有初始化,先初始化
  61. if _global_logger is None:
  62. setup_logger()
  63. # 返回绑定模块名的logger
  64. return _global_logger.bind(name=name)
  65. # 初始化根日志记录器
  66. setup_logger('robot_ai', 'logs')
  67. # 导出统一的logger接口 - 直接导出loguru的logger
  68. __all__ = ['setup_logger', 'get_logger', 'logger']