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