logger_config.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. # logger_config.py
  2. import logging
  3. # from logging.handlers import RotatingFileHandler <-- 注释掉原来的
  4. from concurrent_log_handler import ConcurrentRotatingFileHandler # <-- 导入新的处理程序
  5. import sys
  6. import os
  7. # 定义日志文件的路径
  8. LOG_DIR = 'logs'
  9. LOG_FILE = os.path.join(LOG_DIR, 'app.log')
  10. IS_LOGGOER_CONFIG = False
  11. # 确保日志文件夹存在
  12. if not os.path.exists(LOG_DIR):
  13. os.makedirs(LOG_DIR)
  14. def setup_logging(log_level=logging.INFO):
  15. """
  16. 配置项目的日志记录。
  17. """
  18. root_logger = logging.getLogger()
  19. root_logger.setLevel(log_level)
  20. # 避免重复添加处理程序
  21. if not root_logger.handlers:
  22. # 创建文件处理程序 (使用 ConcurrentRotatingFileHandler)
  23. # 它会在进程间同步,安全地进行日志轮转
  24. file_handler = ConcurrentRotatingFileHandler(
  25. LOG_FILE,
  26. "a", # 使用追加模式 'a'
  27. maxBytes=1024 * 1024 * 5,
  28. backupCount=5,
  29. encoding='utf-8'
  30. )
  31. file_handler.setLevel(log_level)
  32. # 控制台处理程序保持不变
  33. console_handler = logging.StreamHandler(sys.stdout)
  34. console_handler.setLevel(log_level)
  35. formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
  36. file_handler.setFormatter(formatter)
  37. console_handler.setFormatter(formatter)
  38. root_logger.addHandler(file_handler)
  39. root_logger.addHandler(console_handler)
  40. global IS_LOGGOER_CONFIG
  41. IS_LOGGOER_CONFIG = True
  42. def get_logger(name=None):
  43. """
  44. 获取一个日志记录器实例。
  45. """
  46. if not IS_LOGGOER_CONFIG:
  47. setup_logging()
  48. return logging.getLogger(name)