log.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. # -*- coding: utf-8 -*-
  2. # @Author : YY
  3. import os
  4. from typing import Dict, Optional
  5. from logging.handlers import RotatingFileHandler
  6. from logging import Logger
  7. class RuoYiLog:
  8. @classmethod
  9. def generate_handler_from_config(cls, config:Dict) \
  10. -> Optional[RotatingFileHandler]:
  11. """
  12. 生成日志处理器
  13. Args:
  14. config (Dict): 日志配置
  15. Returns:
  16. Optional[RotatingFileHandler]: 日志处理类
  17. """
  18. log_config = config.get("log")
  19. if log_config:
  20. filename = log_config.get("filename")
  21. dir_name,base_name = os.path.split(filename)
  22. if dir_name and not os.path.exists(dir_name):
  23. os.makedirs(dir_name)
  24. filesize = log_config.get("filesize")
  25. if filesize.upper().endswith("MB"):
  26. filesize = cls.mb_to_bytes(int(filesize[:-2]))
  27. elif filesize.upper().endswith("KB"):
  28. filesize = cls.kb_to_bytes(int(filesize[:-2]))
  29. else:
  30. filesize = int(filesize)
  31. filenum = log_config.get("filenum")
  32. handler = RotatingFileHandler(filename, maxBytes=filesize, backupCount=filenum)
  33. level = log_config.get("level")
  34. if level is None or level not in ["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"]:
  35. return None
  36. handler.setLevel(level)
  37. formatter = log_config.get("format")
  38. if formatter is None or not isinstance(formatter, dict):
  39. return None
  40. handler.setFormatter(**formatter)
  41. return handler
  42. else:
  43. return None
  44. @classmethod
  45. def mb_to_bytes(cls, mb:int) -> int:
  46. """
  47. 转换MB为字节
  48. Args:
  49. mb (int): 输入
  50. Returns:
  51. int: 输出
  52. """
  53. return mb * 1024 * 1024
  54. @classmethod
  55. def kb_to_bytes(cls, kb:int) -> int:
  56. """
  57. 转换KB为字节
  58. Args:
  59. mb (int): 输入
  60. Returns:
  61. int: 输出
  62. """
  63. return kb * 1024