logging.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #! /usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # vim:fenc=utf-8
  4. import logging
  5. from logging.handlers import RotatingFileHandler
  6. from pqai_agent import configs
  7. COLORS = {
  8. 'DEBUG': '\033[0m', # 蓝色
  9. 'INFO': '\033[32m', # 绿色
  10. 'WARNING': '\x1b[33;20m', # 黄色
  11. 'ERROR': '\033[91m', # 红色
  12. 'CRITICAL': '\033[95m', # 紫色
  13. 'RESET': '\033[0m', # 重置颜色
  14. }
  15. class ColoredFormatter(logging.Formatter):
  16. def format(self, record):
  17. # 获取原始日志消息
  18. message = super().format(record)
  19. # 根据日志等级添加颜色
  20. if record.levelname in COLORS:
  21. message = f"{COLORS[record.levelname]}{message}{COLORS['RESET']}"
  22. return message
  23. def setup_root_logger(level=logging.DEBUG, logfile_name='service.log'):
  24. logging_format = '%(asctime)s - %(name)s %(funcName)s[%(lineno)d] - %(levelname)s - %(message)s'
  25. plain_formatter = logging.Formatter(logging_format)
  26. color_formatter = ColoredFormatter(logging_format)
  27. console_handler = logging.StreamHandler()
  28. console_handler.setLevel(logging.DEBUG)
  29. console_handler.setFormatter(color_formatter)
  30. root_logger = logging.getLogger()
  31. root_logger.handlers.clear()
  32. root_logger.addHandler(console_handler)
  33. log_dir = configs.get().get('system', {}).get('log_dir', '')
  34. if log_dir:
  35. file_handler = RotatingFileHandler(
  36. f'{log_dir}/{logfile_name}',
  37. maxBytes=64 * 1024 * 1024,
  38. backupCount=5,
  39. encoding='utf-8'
  40. )
  41. file_handler.setLevel(logging.DEBUG)
  42. file_handler.setFormatter(plain_formatter)
  43. root_logger.addHandler(file_handler)
  44. agent_logger = logging.getLogger('agent')
  45. agent_logger.setLevel(level)
  46. logger = logging.getLogger('agent')