refactor: use config and logger in service

This commit is contained in:
2025-11-11 21:22:13 +08:00
parent 268eb8be2b
commit 736d8ed193
4 changed files with 131 additions and 1 deletions

91
src/utils/logger.py Normal file
View File

@@ -0,0 +1,91 @@
import logging
import os
from datetime import datetime
from .config import get_instance as get_config
# 定义颜色代码
class Colors:
RED = '\033[31m'
GREEN = '\033[32m'
YELLOW = '\033[33m'
BLUE = '\033[34m'
MAGENTA = '\033[35m'
CYAN = '\033[36m'
WHITE = '\033[37m'
RESET = '\033[0m' # 重置颜色
# 自定义控制台处理器,为不同日志级别添加颜色
class ColoredConsoleHandler(logging.StreamHandler):
def emit(self, record):
# 为不同日志级别设置颜色
colors = {
logging.DEBUG: Colors.CYAN,
logging.INFO: Colors.GREEN,
logging.WARNING: Colors.YELLOW,
logging.ERROR: Colors.RED,
logging.CRITICAL: Colors.MAGENTA
}
# 获取对应级别的颜色,默认为白色
color = colors.get(record.levelno, Colors.WHITE)
# 获取原始消息
message = self.format(record)
# 添加颜色并输出
self.stream.write(f"{color}{message}{Colors.RESET}\n")
self.flush()
def init():
config = get_config()
log_dir = config.get("log", "log_dir", fallback="logs")
log_file = config.get("log", "log_file", fallback="if.u.service")
log_level = config.get("log", "log_level", fallback=logging.INFO)
console_log_level = config.get("log", "console_log_level", fallback=logging.DEBUG)
# 创建logs目录如果不存在
if not os.path.exists(log_dir):
os.makedirs(log_dir)
# 设置日志格式
log_format = "[%(asctime)s.%(msecs)03d][%(filename)s:%(lineno)d][%(levelname)s] %(message)s"
date_format = "%Y-%m-%d %H:%M:%S"
# 创建格式化器
formatter = logging.Formatter(log_format, datefmt=date_format)
# 获取根日志记录器
root_logger = logging.getLogger()
root_logger.setLevel(logging.NOTSET)
# 清除现有的处理器
root_logger.handlers.clear()
# 创建控制台处理器并设置颜色
console_handler = ColoredConsoleHandler()
console_handler.setFormatter(formatter)
console_handler.setLevel(console_log_level)
root_logger.addHandler(console_handler)
# 创建文件处理器
log_filename = os.path.join(log_dir, f"{log_file}_{datetime.now().strftime('%Y%m%d')}.log")
file_handler = logging.FileHandler(log_filename, encoding='utf-8')
file_handler.setFormatter(formatter)
file_handler.setLevel(log_level)
root_logger.addHandler(file_handler)
# 确保日志消息被正确处理
logging.addLevelName(logging.DEBUG, "D")
logging.addLevelName(logging.INFO, "I")
logging.addLevelName(logging.WARNING, "W")
logging.addLevelName(logging.ERROR, "E")
logging.addLevelName(logging.CRITICAL, "C")
if __name__ == "__main__":
init(log_dir="logs", log_file="test", log_level=logging.INFO, console_log_level=logging.DEBUG)
logging.debug("debug log")
logging.info("info log")
logging.warning("warning log")
logging.error("error log")
logging.critical("critical log")