115 lines
3.3 KiB
Python
115 lines
3.3 KiB
Python
from pathlib import Path
|
|
|
|
from loguru import logger
|
|
|
|
from loveace.config.manager import config_manager
|
|
from loveace.utils.richuru_hook import install
|
|
|
|
|
|
def setup_logger():
|
|
"""根据配置文件设置loguru日志"""
|
|
|
|
settings = config_manager.get_settings()
|
|
log_config = settings.log
|
|
|
|
# 移除默认的logger配置
|
|
logger.remove()
|
|
# 安装 richuru 并配置更详细的堆栈跟踪信息
|
|
install()
|
|
# 确保日志目录存在
|
|
log_dir = Path(log_config.file_path).parent
|
|
log_dir.mkdir(parents=True, exist_ok=True)
|
|
|
|
# 设置主日志文件 - 带有详细路径信息
|
|
logger.add(
|
|
log_config.file_path,
|
|
level=log_config.level.value,
|
|
rotation=log_config.rotation,
|
|
retention=log_config.retention,
|
|
compression=log_config.compression,
|
|
backtrace=log_config.backtrace,
|
|
diagnose=log_config.diagnose,
|
|
# 自定义格式,显示完整的文件路径和行号
|
|
format="{time:YYYY-MM-DD HH:mm:ss.SSS} | {level: <8} | {name}:{function}:{line} | {message}",
|
|
)
|
|
logger.info("日志系统初始化完成")
|
|
|
|
|
|
def get_logger():
|
|
"""获取配置好的logger实例"""
|
|
return logger
|
|
|
|
|
|
class LoggerMixin:
|
|
"""用户日志混合类"""
|
|
|
|
user_id: str = ""
|
|
trace_id: str = ""
|
|
|
|
def __init__(self, user_id: str = "", trace_id: str = ""):
|
|
self.user_id = user_id
|
|
self.trace_id = trace_id
|
|
|
|
def _build_message(self, message: str):
|
|
if self.user_id and self.trace_id:
|
|
return f"[{self.user_id}] [{self.trace_id}] {message}"
|
|
|
|
elif self.user_id:
|
|
return f"[{self.user_id}] {message}"
|
|
|
|
elif self.trace_id:
|
|
return f"[{self.trace_id}] {message}"
|
|
|
|
else:
|
|
return message
|
|
|
|
def _build_alt_message(self, alt: str):
|
|
if self.user_id and self.trace_id:
|
|
return f"[bold green][{self.user_id}][/bold green] [bold blue][{self.trace_id}][/bold blue] {alt}"
|
|
elif self.user_id:
|
|
return f"[bold green][{self.user_id}][/bold green] {alt}"
|
|
elif self.trace_id:
|
|
return f"[bold blue][{self.trace_id}][/bold blue] {alt}"
|
|
else:
|
|
return alt
|
|
|
|
def info(self, message: str, alt: str = ""):
|
|
logger.opt(depth=1).info(
|
|
self._build_message(message),
|
|
alt=self._build_alt_message(alt if alt else message),
|
|
)
|
|
|
|
def debug(self, message: str, alt: str = ""):
|
|
logger.opt(depth=1).debug(
|
|
self._build_message(message),
|
|
alt=self._build_alt_message(alt if alt else message),
|
|
)
|
|
|
|
def warning(self, message: str, alt: str = ""):
|
|
logger.opt(depth=1).warning(
|
|
self._build_message(message),
|
|
alt=self._build_alt_message(alt if alt else message),
|
|
)
|
|
|
|
def error(self, message: str, alt: str = ""):
|
|
logger.opt(depth=1).error(
|
|
self._build_message(message),
|
|
alt=self._build_alt_message(alt if alt else message),
|
|
)
|
|
|
|
def success(self, message: str, alt: str = ""):
|
|
logger.opt(depth=1).success(
|
|
self._build_message(message),
|
|
alt=self._build_alt_message(alt if alt else message),
|
|
)
|
|
|
|
def exception(self, e: Exception):
|
|
logger.opt(depth=1).exception(e)
|
|
|
|
|
|
def get_user_logger(user_id: str):
|
|
return LoggerMixin(user_id)
|
|
|
|
|
|
setup_logger()
|