Files
LoveACE-EndF/loveace/config/logger.py
Sibuxiangx bbc86b8330 ⚒️ 重大重构 LoveACE V2
引入了 mongodb
对数据库进行了一定程度的数据加密
性能改善
代码简化
统一错误模型和响应
使用 apifox 作为文档
2025-11-20 20:44:25 +08:00

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()