算法暴露接口(xhs、dy、ks、wx、hnw)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

111 lines
3.0 KiB

7 months ago
  1. import os
  2. from functools import wraps
  3. from time import perf_counter
  4. from loguru import logger
  5. # from loguru._logger import Logger
  6. class MyLogger:
  7. """
  8. """
  9. def __init__(self, log_dir='logs', max_size=20, retention='7 days'):
  10. self.log_dir = log_dir
  11. self.max_size = max_size
  12. self.retention = retention
  13. self.logger = self.configure_logger()
  14. def configure_logger(self):
  15. """
  16. Returns:
  17. """
  18. # 创建日志目录
  19. os.makedirs(self.log_dir, exist_ok=True)
  20. shared_config = {
  21. "level": "DEBUG",
  22. "enqueue": True,
  23. "backtrace": True,
  24. "format": "{time:YYYY-MM-DD HH:mm:ss} | {level} | {message}",
  25. }
  26. # 添加按照日期和大小切割的文件 handler
  27. logger.add(
  28. sink=f"{self.log_dir}/{{time:YYYY-MM-DD}}.log",
  29. rotation=f"{self.max_size} MB",
  30. retention=self.retention,
  31. **shared_config
  32. )
  33. # 配置按照等级划分的文件 handler 和控制台输出
  34. logger.add(sink=self.get_log_path, **shared_config)
  35. return logger
  36. def get_log_path(self, message: str) -> str:
  37. """
  38. Args:
  39. message:
  40. Returns:
  41. """
  42. log_level = message.record["level"].name.lower()
  43. log_file = f"{log_level}.log"
  44. log_path = os.path.join(self.log_dir, log_file)
  45. return log_path
  46. def __getattr__(self, level: str):
  47. return getattr(self.logger, level)
  48. def log_decorator(self, msg="快看,异常了,别唧唧哇哇,快排查"):
  49. """
  50. Args:
  51. logger:
  52. Returns:
  53. """
  54. def decorator(func):
  55. @wraps(func)
  56. def wrapper(*args, **kwargs):
  57. self.logger.info(f'-----------分割线-----------')
  58. self.logger.info(f'调用 {func.__name__} args: {args}; kwargs:{kwargs}')
  59. start = perf_counter() # 开始时间
  60. try:
  61. result = func(*args, **kwargs)
  62. end = perf_counter() # 结束时间
  63. duration = end - start
  64. self.logger.info(f"{func.__name__} 返回结果:{result}, 耗时:{duration:4f}s")
  65. return result
  66. except Exception as e:
  67. self.logger.exception(f"{func.__name__}: {msg}")
  68. self.logger.info(f"-----------分割线-----------")
  69. # raise e
  70. return wrapper
  71. return decorator
  72. if __name__ == '__main__':
  73. log = MyLogger()
  74. for i in range(1000):
  75. log.error('错误信息')
  76. log.critical('严重错误信息')
  77. log.debug('调试信息')
  78. log.info('普通信息')
  79. log.success('成功信息')
  80. log.warning('警告信息')