diff --git a/bot.py b/bot.py index acc7990ed..7a97f485e 100644 --- a/bot.py +++ b/bot.py @@ -10,9 +10,8 @@ import uvicorn from dotenv import load_dotenv from nonebot.adapters.onebot.v11 import Adapter import platform -from src.plugins.utils.logger_config import setup_logger +from src.plugins.utils.logger_config import LogModule, LogClassification -from loguru import logger # 配置日志格式 @@ -102,7 +101,9 @@ def load_env(): def load_logger(): - setup_logger() + global logger # 使得bot.py中其他函数也能调用 + log_module = LogModule() + logger = log_module.setup_logger(LogClassification.BASE) def scan_provider(env_config: dict): @@ -174,8 +175,6 @@ def raw_main(): if platform.system().lower() != "windows": time.tzset() - # 配置日志 - load_logger() easter_egg() init_config() init_env() @@ -207,6 +206,8 @@ def raw_main(): if __name__ == "__main__": try: + # 配置日志,使得主程序直接退出时候也能访问logger + load_logger() raw_main() app = nonebot.get_asgi() diff --git a/src/plugins/chat/bot.py b/src/plugins/chat/bot.py index 4d1318f2a..4df6364dc 100644 --- a/src/plugins/chat/bot.py +++ b/src/plugins/chat/bot.py @@ -32,10 +32,11 @@ from .utils_image import image_path_to_base64 from .utils_user import get_user_nickname, get_user_cardname, get_groupname from .willing_manager import willing_manager # 导入意愿管理器 from .message_base import UserInfo, GroupInfo, Seg -from ..utils.logger_config import setup_logger, LogModule +from ..utils.logger_config import LogClassification, LogModule # 配置日志 -logger = setup_logger(LogModule.CHAT) +log_module = LogModule() +logger = log_module.setup_logger(LogClassification.CHAT) class ChatBot: diff --git a/src/plugins/chat/emoji_manager.py b/src/plugins/chat/emoji_manager.py index ab5dad5e9..f37392190 100644 --- a/src/plugins/chat/emoji_manager.py +++ b/src/plugins/chat/emoji_manager.py @@ -18,10 +18,11 @@ from ..chat.utils import get_embedding from ..chat.utils_image import ImageManager, image_path_to_base64 from ..models.utils_model import LLM_request -from ..utils.logger_config import setup_logger, LogModule +from ..utils.logger_config import LogClassification, LogModule # 配置日志 -logger = setup_logger(LogModule.EMOJI) +log_module = LogModule() +logger = log_module.setup_logger(LogClassification.EMOJI) driver = get_driver() config = driver.config diff --git a/src/plugins/memory_system/memory.py b/src/plugins/memory_system/memory.py index f5c7181b3..0cbd16cbe 100644 --- a/src/plugins/memory_system/memory.py +++ b/src/plugins/memory_system/memory.py @@ -19,10 +19,11 @@ from ..chat.utils import ( ) from ..models.utils_model import LLM_request -from ..utils.logger_config import setup_logger, LogModule +from ..utils.logger_config import LogClassification, LogModule # 配置日志 -logger = setup_logger(LogModule.MEMORY) +log_module = LogModule() +logger = log_module.setup_logger(LogClassification.MEMORY) logger.info("初始化记忆系统") diff --git a/src/plugins/utils/logger_config.py b/src/plugins/utils/logger_config.py index cc15d53a4..fff5a50d3 100644 --- a/src/plugins/utils/logger_config.py +++ b/src/plugins/utils/logger_config.py @@ -1,71 +1,77 @@ import sys -from loguru import logger +import loguru from enum import Enum -class LogModule(Enum): +class LogClassification(Enum): BASE = "base" MEMORY = "memory" EMOJI = "emoji" CHAT = "chat" -def setup_logger(log_type: LogModule = LogModule.BASE): - """配置日志格式 - - Args: - log_type: 日志类型,可选值:BASE(基础日志)、MEMORY(记忆系统日志)、EMOJI(表情包系统日志) - """ - # 移除默认的处理器 - logger.remove() - - # 基础日志格式 - base_format = "{time:HH:mm:ss} | {level: <8} | {name}:{function}:{line} - {message}" - - chat_format = "{time:HH:mm:ss} | {level: <8} | {name}:{function}:{line} - {message}" - - # 记忆系统日志格式 - memory_format = "{time:HH:mm} | {level: <8} | 海马体 | {message}" - - # 表情包系统日志格式 - emoji_format = "{time:HH:mm} | {level: <8} | 表情包 | {function}:{line} - {message}" - # 根据日志类型选择日志格式和输出 - if log_type == LogModule.CHAT: - logger.add( - sys.stderr, - format=chat_format, - # level="INFO" - ) - elif log_type == LogModule.MEMORY: - # 同时输出到控制台和文件 - logger.add( - sys.stderr, - format=memory_format, - # level="INFO" - ) - logger.add( - "logs/memory.log", - format=memory_format, - level="INFO", - rotation="1 day", - retention="7 days" - ) - elif log_type == LogModule.EMOJI: - logger.add( - sys.stderr, - format=emoji_format, - # level="INFO" - ) - logger.add( - "logs/emoji.log", - format=emoji_format, - level="INFO", - rotation="1 day", - retention="7 days" - ) - else: # BASE - logger.add( - sys.stderr, - format=base_format, - level="INFO" - ) - - return logger +class LogModule: + logger = loguru.logger.opt() + + def __init__(self): + pass + def setup_logger(self, log_type: LogClassification): + """配置日志格式 + + Args: + log_type: 日志类型,可选值:BASE(基础日志)、MEMORY(记忆系统日志)、EMOJI(表情包系统日志) + """ + # 移除默认日志处理器 + self.logger.remove() + + # 基础日志格式 + base_format = "{time:HH:mm:ss} | {level: <8} | {name}:{function}:{line} - {message}" + + chat_format = "{time:HH:mm:ss} | {level: <8} | {name}:{function}:{line} - {message}" + + # 记忆系统日志格式 + memory_format = "{time:HH:mm} | {level: <8} | 海马体 | {message}" + + # 表情包系统日志格式 + emoji_format = "{time:HH:mm} | {level: <8} | 表情包 | {function}:{line} - {message}" + # 根据日志类型选择日志格式和输出 + if log_type == LogClassification.CHAT: + self.logger.add( + sys.stderr, + format=chat_format, + # level="INFO" + ) + elif log_type == LogClassification.MEMORY: + + # 同时输出到控制台和文件 + self.logger.add( + sys.stderr, + format=memory_format, + # level="INFO" + ) + self.logger.add( + "logs/memory.log", + format=memory_format, + level="INFO", + rotation="1 day", + retention="7 days" + ) + elif log_type == LogClassification.EMOJI: + self.logger.add( + sys.stderr, + format=emoji_format, + # level="INFO" + ) + self.logger.add( + "logs/emoji.log", + format=emoji_format, + level="INFO", + rotation="1 day", + retention="7 days" + ) + else: # BASE + self.logger.add( + sys.stderr, + format=base_format, + level="INFO" + ) + + return self.logger