fix: 修复日志格式化器以支持文件名和行号,优化日志输出格式

This commit is contained in:
snaily
2025-04-22 18:48:51 +08:00
parent b4f040e77a
commit 9302cf295e
+15 -15
View File
@@ -1,19 +1,19 @@
import logging import logging
import platform
import sys import sys
from typing import Dict, Optional from typing import Dict, Optional
import platform
# ANSI转义序列颜色代码 # ANSI转义序列颜色代码
COLORS = { COLORS = {
'DEBUG': '\033[34m', # 蓝色 "DEBUG": "\033[34m", # 蓝色
'INFO': '\033[32m', # 绿色 "INFO": "\033[32m", # 绿色
'WARNING': '\033[33m', # 黄色 "WARNING": "\033[33m", # 黄色
'ERROR': '\033[31m', # 红色 "ERROR": "\033[31m", # 红色
'CRITICAL': '\033[1;31m' # 红色加粗 "CRITICAL": "\033[1;31m", # 红色加粗
} }
# Windows系统启用ANSI支持 # Windows系统启用ANSI支持
if platform.system() == 'Windows': if platform.system() == "Windows":
import ctypes import ctypes
kernel32 = ctypes.windll.kernel32 kernel32 = ctypes.windll.kernel32
@@ -27,15 +27,17 @@ class ColoredFormatter(logging.Formatter):
def format(self, record): def format(self, record):
# 获取对应级别的颜色代码 # 获取对应级别的颜色代码
color = COLORS.get(record.levelname, '') color = COLORS.get(record.levelname, "")
# 添加颜色代码和重置代码 # 添加颜色代码和重置代码
record.levelname = f"{color}{record.levelname}\033[0m" record.levelname = f"{color}{record.levelname}\033[0m"
# 创建包含文件名和行号的固定宽度字符串
record.fileloc = f"[{record.filename}:{record.lineno}]"
return super().format(record) return super().format(record)
# 日志格式 # 日志格式 - 使用 fileloc 并设置固定宽度 (例如 30)
FORMATTER = ColoredFormatter( FORMATTER = ColoredFormatter(
"%(asctime)s | %(name)-15s | %(levelname)-8s | [%(filename)-20s:%(lineno)-4d] | %(message)s" "%(asctime)s | %(levelname)-17s | %(fileloc)-30s | %(message)s"
) )
# 日志级别映射 # 日志级别映射
@@ -55,9 +57,7 @@ class Logger:
_loggers: Dict[str, logging.Logger] = {} _loggers: Dict[str, logging.Logger] = {}
@staticmethod @staticmethod
def setup_logger( def setup_logger(name: str) -> logging.Logger:
name: str
) -> logging.Logger:
""" """
设置并获取logger 设置并获取logger
:param name: logger名称 :param name: logger名称
@@ -65,6 +65,7 @@ class Logger:
""" """
# 导入 settings 对象 # 导入 settings 对象
from app.config.config import settings from app.config.config import settings
# 从全局配置获取日志级别 # 从全局配置获取日志级别
log_level_str = settings.LOG_LEVEL.lower() log_level_str = settings.LOG_LEVEL.lower()
level = LOG_LEVELS.get(log_level_str, logging.INFO) level = LOG_LEVELS.get(log_level_str, logging.INFO)
@@ -97,7 +98,6 @@ class Logger:
""" """
return Logger._loggers.get(name) return Logger._loggers.get(name)
@staticmethod @staticmethod
def update_log_levels(log_level: str): def update_log_levels(log_level: str):
""" """
@@ -205,4 +205,4 @@ def get_update_logger():
def get_scheduler_routes(): def get_scheduler_routes():
return Logger.setup_logger("scheduler_routes") return Logger.setup_logger("scheduler_routes")