logger.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. from functools import wraps
  2. import os
  3. import datetime
  4. import loguru
  5. # 单例类的装饰器
  6. def singleton_class_decorator(cls):
  7. """
  8. 装饰器,单例类的装饰器
  9. """
  10. _instance = {}
  11. @wraps(cls)
  12. def wrapper_class(*args, **kwargs):
  13. if cls not in _instance:
  14. _instance[cls] = cls(*args, **kwargs)
  15. return _instance[cls]
  16. return wrapper_class
  17. @singleton_class_decorator
  18. class Logger:
  19. def __init__(self):
  20. self.logger_add()
  21. def get_project_path(self, project_path=None):
  22. if project_path is None:
  23. project_path = os.path.realpath('.')
  24. return project_path
  25. def get_log_path(self):
  26. project_path = self.get_project_path()
  27. project_log_dir = os.path.join(project_path, 'log')
  28. # 统一使用 runtime.log 作为日志文件名
  29. project_log_filename = 'runtime.log'
  30. project_log_path = os.path.join(project_log_dir, project_log_filename)
  31. return project_log_path
  32. def logger_add(self):
  33. loguru.logger.add(
  34. sink=self.get_log_path(),
  35. rotation="50 MB", # 每个日志文件最大10MB
  36. retention=5, # 最多保留5个日志文件
  37. compression=None,
  38. encoding="utf-8",
  39. enqueue=True
  40. )
  41. @property
  42. def get_logger(self):
  43. return loguru.logger
  44. # 实例化日志类
  45. logger = Logger().get_logger
  46. if __name__ == '__main__':
  47. logger.debug('调试代码')
  48. logger.info('输出信息')
  49. logger.success('输出成功')
  50. logger.warning('错误警告')
  51. logger.error('代码错误')
  52. logger.critical('崩溃输出')
  53. logger.info('----原始测试----')