83 lines
2.7 KiB
Python
83 lines
2.7 KiB
Python
import logging
|
||
import sys
|
||
import os
|
||
|
||
TRACE = 5
|
||
DEBUG = logging.DEBUG
|
||
INFO = logging.INFO
|
||
WARNING = logging.WARNING
|
||
ERROR = logging.ERROR
|
||
CRITICAL = logging.CRITICAL
|
||
NOTSET = logging.NOTSET
|
||
|
||
def get_logger(name=None):
|
||
if name is None:
|
||
name = 'alkaid_release_platform'
|
||
# 创建一个 logger
|
||
logger = logging.getLogger(name)
|
||
if logger.handlers:
|
||
return logger
|
||
|
||
#定义一个新的日志级别,用于输出trace信息
|
||
logging.TRACE = TRACE
|
||
logging.addLevelName(logging.TRACE, "TRACE")
|
||
def trace(self, message, *args, **kws):
|
||
self._log(logging.TRACE, message, args, **kws)
|
||
logging.Logger.trace = trace
|
||
|
||
logger.setLevel(INFO)
|
||
class LogColors:
|
||
RESET = "\033[0m"
|
||
TRACE = "\033[35m" # 紫色
|
||
DEBUG = "\033[34m" # 蓝色
|
||
INFO = "\033[32m" # 绿色
|
||
WARNING = "\033[33m" # 黄色
|
||
ERROR = "\033[31m" # 红色
|
||
CRITICAL = "\033[41m" # 红底白字
|
||
|
||
# 创建一个log的颜色格式化器,使得输出的log信息在控制台上有颜色区分
|
||
class ColoredFormatter(logging.Formatter):
|
||
def __init__(self, msg, use_color=True):
|
||
logging.Formatter.__init__(self, msg)
|
||
self.use_color = use_color
|
||
def format(self, record):
|
||
level_color = {
|
||
logging.TRACE: LogColors.TRACE,
|
||
logging.DEBUG: LogColors.DEBUG,
|
||
logging.INFO: LogColors.INFO,
|
||
logging.WARNING: LogColors.WARNING,
|
||
logging.ERROR: LogColors.ERROR,
|
||
logging.CRITICAL: LogColors.CRITICAL
|
||
}
|
||
color = level_color.get(record.levelno, LogColors.RESET)
|
||
message = super().format(record)
|
||
return f"{color}{message}{LogColors.RESET}" if os.isatty(sys.stdout.fileno()) else message
|
||
|
||
# 创建一个带颜色的控制台处理器
|
||
console_handler = logging.StreamHandler(sys.stdout)
|
||
console_handler.setLevel(INFO)
|
||
# 创建一个带颜色的格式化器并将其添加到处理器
|
||
formatter = ColoredFormatter('[%(asctime)s][%(levelname)s][%(filename)s:%(lineno)d]: %(message)s')
|
||
console_handler.setFormatter(formatter)
|
||
|
||
# 将处理器添加到 logger
|
||
logger.addHandler(console_handler)
|
||
|
||
# 定义一个方法,用于设置日志级别,并将其绑定到 logger 对象
|
||
def set_level(self, level):
|
||
lv_map = {
|
||
"trace":TRACE,
|
||
"debug":DEBUG,
|
||
"info":INFO,
|
||
"warning":WARNING,
|
||
"error":ERROR,
|
||
"critical":CRITICAL
|
||
}
|
||
level = lv_map.get(level, DEBUG)
|
||
for handler in self.handlers:
|
||
handler.setLevel(level)
|
||
logger.setLevel(level)
|
||
logging.Logger.set_level = set_level
|
||
return logger
|
||
|