feat: 更新日志配置,添加日志桥接功能 #462
This commit is contained in:
parent
28259ff66d
commit
5a5b105769
@ -32,17 +32,6 @@ class LightRagKB(KnowledgeBase):
|
||||
# 存储 LightRAG 实例映射 {db_id: LightRAG}
|
||||
self.instances: dict[str, LightRAG] = {}
|
||||
|
||||
# 设置 LightRAG 日志
|
||||
log_dir = os.path.join(work_dir, "logs", "lightrag")
|
||||
os.makedirs(log_dir, exist_ok=True)
|
||||
# 禁止调用 lightrag.utils.setup_logger,因为它会重置全局 logger 配置(调用 logger.remove())
|
||||
# 导致主程序的控制台输出丢失。
|
||||
# 全局 logger 已在 src/utils/logging_config.py 中配置好。
|
||||
# setup_logger(
|
||||
# "lightrag",
|
||||
# log_file_path=os.path.join(log_dir, f"lightrag_{shanghai_now().strftime('%Y-%m-%d')}.log"),
|
||||
# )
|
||||
|
||||
logger.info("LightRagKB initialized")
|
||||
|
||||
@property
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
import logging
|
||||
import os
|
||||
import sys
|
||||
|
||||
@ -10,9 +11,50 @@ DATETIME = shanghai_now().strftime("%Y-%m-%d")
|
||||
LOG_FILE = f"{SAVE_DIR}/logs/yuxi-{DATETIME}.log"
|
||||
|
||||
|
||||
class LoguruHandler(logging.Handler):
|
||||
"""将 Python logging 桥接到 loguru 的 handler"""
|
||||
|
||||
def emit(self, record: logging.LogRecord):
|
||||
level_map = {
|
||||
logging.DEBUG: "DEBUG",
|
||||
logging.INFO: "INFO",
|
||||
logging.WARNING: "WARNING",
|
||||
logging.ERROR: "ERROR",
|
||||
logging.CRITICAL: "CRITICAL",
|
||||
}
|
||||
level = level_map.get(record.levelno, "DEBUG")
|
||||
try:
|
||||
msg = self.format(record)
|
||||
except Exception:
|
||||
msg = record.getMessage()
|
||||
loguru_logger.opt(depth=1, exception=record.exc_info).log(level, msg)
|
||||
|
||||
|
||||
def _setup_logging_bridge():
|
||||
"""配置 logging 到 loguru 的桥接,捕获第三方库日志(如 LightRAG)"""
|
||||
loguru_handler = LoguruHandler()
|
||||
loguru_handler.setLevel(logging.DEBUG)
|
||||
|
||||
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
|
||||
loguru_handler.setFormatter(formatter)
|
||||
|
||||
# 桥接 LightRAG 日志
|
||||
lightrag_logger = logging.getLogger("lightrag")
|
||||
lightrag_logger.addHandler(loguru_handler)
|
||||
lightrag_logger.setLevel(logging.DEBUG)
|
||||
lightrag_logger.propagate = False # 避免重复
|
||||
|
||||
# 桥接其他常见第三方库(降低级别减少噪音)
|
||||
for lib in ["httpx", "openai", "neo4j", "urllib3"]:
|
||||
lib_logger = logging.getLogger(lib)
|
||||
lib_logger.addHandler(loguru_handler)
|
||||
lib_logger.setLevel(logging.WARNING)
|
||||
lib_logger.propagate = False
|
||||
|
||||
|
||||
def setup_logger(name, level="DEBUG", console=True):
|
||||
"""使用 loguru 设置日志记录器"""
|
||||
os.makedirs(f"{SAVE_DIR}/logs", exist_ok=True) # 创建日志目录
|
||||
os.makedirs(f"{SAVE_DIR}/logs", exist_ok=True)
|
||||
|
||||
# 移除默认的 handler
|
||||
loguru_logger.remove()
|
||||
@ -23,10 +65,10 @@ def setup_logger(name, level="DEBUG", console=True):
|
||||
level=level,
|
||||
format="{time:YYYY-MM-DD HH:mm:ss} - {level} - {file}:{line} - {message}",
|
||||
encoding="utf-8",
|
||||
rotation="10 MB", # 文件大小达到 10MB 时轮转
|
||||
retention="30 days", # 保留30天的日志
|
||||
compression="zip", # 压缩旧日志文件
|
||||
enqueue=True, # 异步写入,确保线程安全
|
||||
rotation="10 MB",
|
||||
retention="30 days",
|
||||
compression="zip",
|
||||
enqueue=True,
|
||||
)
|
||||
|
||||
# 添加控制台日志(有颜色)
|
||||
@ -41,7 +83,7 @@ def setup_logger(name, level="DEBUG", console=True):
|
||||
"<level>{message}</level>"
|
||||
),
|
||||
colorize=True,
|
||||
enqueue=True, # 异步写入,确保线程安全
|
||||
enqueue=True,
|
||||
)
|
||||
|
||||
return loguru_logger
|
||||
@ -50,7 +92,7 @@ def setup_logger(name, level="DEBUG", console=True):
|
||||
# 设置根日志记录器
|
||||
logger = setup_logger("Yuxi")
|
||||
|
||||
__all__ = ["logger"]
|
||||
# 初始化 logging 桥接
|
||||
_setup_logging_bridge()
|
||||
|
||||
# If you want to disable logging from external libraries
|
||||
# logging.getLogger('some_external_library').setLevel(logging.CRITICAL)
|
||||
__all__ = ["logger"]
|
||||
|
||||
Loading…
Reference in New Issue
Block a user