| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- # -*- coding: utf-8 -*-
- # @Author : YY
- import os
- from typing import Dict, Optional
- from logging.handlers import RotatingFileHandler
- from logging import Logger
- class RuoYiLog:
- @classmethod
- def generate_handler_from_config(cls, config:Dict) \
- -> Optional[RotatingFileHandler]:
- """
- 生成日志处理器
- Args:
- config (Dict): 日志配置
- Returns:
- Optional[RotatingFileHandler]: 日志处理类
- """
- log_config = config.get("log")
- if log_config:
- filename = log_config.get("filename")
- dir_name,base_name = os.path.split(filename)
- if dir_name and not os.path.exists(dir_name):
- os.makedirs(dir_name)
- filesize = log_config.get("filesize")
- if filesize.upper().endswith("MB"):
- filesize = cls.mb_to_bytes(int(filesize[:-2]))
- elif filesize.upper().endswith("KB"):
- filesize = cls.kb_to_bytes(int(filesize[:-2]))
- else:
- filesize = int(filesize)
- filenum = log_config.get("filenum")
- handler = RotatingFileHandler(filename, maxBytes=filesize, backupCount=filenum)
- level = log_config.get("level")
- if level is None or level not in ["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"]:
- return None
- handler.setLevel(level)
- formatter = log_config.get("format")
- if formatter is None or not isinstance(formatter, dict):
- return None
- handler.setFormatter(**formatter)
- return handler
- else:
- return None
-
- @classmethod
- def mb_to_bytes(cls, mb:int) -> int:
- """
- 转换MB为字节
- Args:
- mb (int): 输入
- Returns:
- int: 输出
- """
- return mb * 1024 * 1024
-
- @classmethod
- def kb_to_bytes(cls, kb:int) -> int:
- """
- 转换KB为字节
- Args:
- mb (int): 输入
- Returns:
- int: 输出
- """
- return kb * 1024
|