Lib.utils.Logger

日志记录器

  1"""
  2日志记录器
  3"""
  4
  5import logging
  6import logging.handlers as handlers
  7import sys
  8from ..constants import *
  9
 10import coloredlogs
 11
 12
 13logger: logging.Logger = None
 14
 15
 16def init(logs_path: str = LOGS_PATH, logger_level: int = logging.INFO):
 17    """
 18    初始化日志记录器
 19    Args:
 20        @param logs_path:
 21        @param logger_level:
 22    Returns:
 23        None
 24    """
 25    global logger
 26
 27    if logger is not None:
 28        return logger
 29    # 日志颜色
 30    log_colors = {
 31        "DEBUG": "white",
 32        "INFO": "green",
 33        "WARNING": "yellow",
 34        "ERROR": "red",
 35        "CRITICAL": "bold_red",
 36    }
 37    log_field_styles = {
 38        "asctime": {"color": "green"},
 39        "hostname": {"color": "magenta"},
 40        "levelname": {"color": "white"}
 41    }
 42    # 日志格式
 43    fmt = "[%(asctime)s] [%(filename)s] [%(levelname)s]: %(message)s"
 44    # 设置日志
 45    coloredlogs.install(isatty=True, stream=sys.stdout, field_styles=log_field_styles, fmt=fmt, colors=log_colors)
 46
 47    # 设置文件日志
 48    logger = logging.getLogger()
 49
 50    logger.setLevel(logger_level)
 51    coloredlogs.set_level(logger_level)
 52
 53    log_name = "latest.log"
 54    log_path = os.path.join(logs_path, log_name)
 55    # 如果指定路径不存在,则尝试创建路径
 56    if not os.path.exists(logs_path):
 57        os.makedirs(logs_path)
 58
 59    def namer(filename):
 60        """
 61        生成文件名
 62        Args:
 63            filename: 文件名
 64        Returns:
 65            文件名
 66        """
 67        dir_name, base_name = os.path.split(filename)
 68        base_name = base_name.replace(log_name + '.', "")
 69        rotation_filename = os.path.join(dir_name, base_name)
 70        return rotation_filename
 71
 72    file_handler = handlers.TimedRotatingFileHandler(log_path, when="MIDNIGHT", encoding="utf-8")
 73    file_handler.namer = namer
 74    file_handler.suffix = "%Y-%m-%d.log"
 75    file_handler.setFormatter(logging.Formatter(fmt))
 76    logger.addHandler(file_handler)
 77    return logger
 78
 79
 80def set_logger_level(level: int):
 81    """
 82    设置日志级别
 83    Args:
 84        level: 日志级别
 85    Returns:
 86        None
 87    """
 88    global logger
 89    logger.setLevel(level)
 90    coloredlogs.set_level(level)
 91
 92
 93def get_logger():
 94    """
 95    获取日志记录器
 96    Returns:
 97        Logger
 98    """
 99    if not logger:
100        init()
101    return logger
logger: logging.Logger = <RootLogger root (INFO)>
def init(logs_path: str = '/home/MuRainBot2/logs', logger_level: int = 20):
17def init(logs_path: str = LOGS_PATH, logger_level: int = logging.INFO):
18    """
19    初始化日志记录器
20    Args:
21        @param logs_path:
22        @param logger_level:
23    Returns:
24        None
25    """
26    global logger
27
28    if logger is not None:
29        return logger
30    # 日志颜色
31    log_colors = {
32        "DEBUG": "white",
33        "INFO": "green",
34        "WARNING": "yellow",
35        "ERROR": "red",
36        "CRITICAL": "bold_red",
37    }
38    log_field_styles = {
39        "asctime": {"color": "green"},
40        "hostname": {"color": "magenta"},
41        "levelname": {"color": "white"}
42    }
43    # 日志格式
44    fmt = "[%(asctime)s] [%(filename)s] [%(levelname)s]: %(message)s"
45    # 设置日志
46    coloredlogs.install(isatty=True, stream=sys.stdout, field_styles=log_field_styles, fmt=fmt, colors=log_colors)
47
48    # 设置文件日志
49    logger = logging.getLogger()
50
51    logger.setLevel(logger_level)
52    coloredlogs.set_level(logger_level)
53
54    log_name = "latest.log"
55    log_path = os.path.join(logs_path, log_name)
56    # 如果指定路径不存在,则尝试创建路径
57    if not os.path.exists(logs_path):
58        os.makedirs(logs_path)
59
60    def namer(filename):
61        """
62        生成文件名
63        Args:
64            filename: 文件名
65        Returns:
66            文件名
67        """
68        dir_name, base_name = os.path.split(filename)
69        base_name = base_name.replace(log_name + '.', "")
70        rotation_filename = os.path.join(dir_name, base_name)
71        return rotation_filename
72
73    file_handler = handlers.TimedRotatingFileHandler(log_path, when="MIDNIGHT", encoding="utf-8")
74    file_handler.namer = namer
75    file_handler.suffix = "%Y-%m-%d.log"
76    file_handler.setFormatter(logging.Formatter(fmt))
77    logger.addHandler(file_handler)
78    return logger

初始化日志记录器

Arguments:
  • @param logs_path:
  • @param logger_level:
Returns:

None

def set_logger_level(level: int):
81def set_logger_level(level: int):
82    """
83    设置日志级别
84    Args:
85        level: 日志级别
86    Returns:
87        None
88    """
89    global logger
90    logger.setLevel(level)
91    coloredlogs.set_level(level)

设置日志级别

Arguments:
  • level: 日志级别
Returns:

None

def get_logger():
 94def get_logger():
 95    """
 96    获取日志记录器
 97    Returns:
 98        Logger
 99    """
100    if not logger:
101        init()
102    return logger

获取日志记录器

Returns:

Logger