From 17585c8294cb351258633f1b7fb4fd64e90dda14 Mon Sep 17 00:00:00 2001
From: Sakura-RanChen <1908198662@qq.com>
Date: Tue, 27 May 2025 16:17:13 +0800
Subject: [PATCH] =?UTF-8?q?update:=E6=97=A5=E5=BF=97=E9=85=8D=E7=BD=AE?=
=?UTF-8?q?=E5=8A=A8=E6=80=81=E8=8E=B7=E5=8F=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
main/xiaozhi-server/config/logger.py | 109 ++++++++++++++++++-------
main/xiaozhi-server/core/connection.py | 8 +-
2 files changed, 86 insertions(+), 31 deletions(-)
diff --git a/main/xiaozhi-server/config/logger.py b/main/xiaozhi-server/config/logger.py
index 5588e00f..44b3aab4 100644
--- a/main/xiaozhi-server/config/logger.py
+++ b/main/xiaozhi-server/config/logger.py
@@ -5,6 +5,7 @@ from config.config_loader import load_config
from config.settings import check_config_file
SERVER_VERSION = "0.4.4"
+_logger_initialized = False
def get_module_abbreviation(module_name, module_dict):
@@ -43,41 +44,89 @@ def setup_logging():
"""从配置文件中读取日志配置,并设置日志输出格式和级别"""
config = load_config()
log_config = config["log"]
- log_format = log_config.get(
- "log_format",
- "{time:YYMMDD HH:mm:ss}[{version}_{selected_module}][{extra[tag]}]-{level}-{message}",
- )
- log_format_file = log_config.get(
- "log_format_file",
- "{time:YYYY-MM-DD HH:mm:ss} - {version_{selected_module}} - {name} - {level} - {extra[tag]} - {message}",
- )
- selected_module_str = build_module_string(config.get("selected_module", {}))
+ global _logger_initialized
- log_format = log_format.replace("{version}", SERVER_VERSION)
- log_format = log_format.replace("{selected_module}", selected_module_str)
- log_format_file = log_format_file.replace("{version}", SERVER_VERSION)
- log_format_file = log_format_file.replace("{selected_module}", selected_module_str)
+ # 第一次初始化时配置日志
+ if not _logger_initialized:
+ logger.configure(extra={"selected_module": log_config.get("selected_module", "00000000000000")}) # 新增配置
+ log_format = log_config.get(
+ "log_format",
+ "{time:YYMMDD HH:mm:ss}[{version}_{extra[selected_module]}][{extra[tag]}]-{level}-{message}",
+ )
+ log_format_file = log_config.get(
+ "log_format_file",
+ "{time:YYYY-MM-DD HH:mm:ss} - {version_{extra[selected_module]}} - {name} - {level} - {extra[tag]} - {message}",
+ )
+ selected_module_str = logger._core.extra["selected_module"]
- log_level = log_config.get("log_level", "INFO")
- log_dir = log_config.get("log_dir", "tmp")
- log_file = log_config.get("log_file", "server.log")
- data_dir = log_config.get("data_dir", "data")
+ log_format = log_format.replace("{version}", SERVER_VERSION)
+ log_format = log_format.replace("{selected_module}", selected_module_str)
+ log_format_file = log_format_file.replace("{version}", SERVER_VERSION)
+ log_format_file = log_format_file.replace("{selected_module}", selected_module_str)
- os.makedirs(log_dir, exist_ok=True)
- os.makedirs(data_dir, exist_ok=True)
+ log_level = log_config.get("log_level", "INFO")
+ log_dir = log_config.get("log_dir", "tmp")
+ log_file = log_config.get("log_file", "server.log")
+ data_dir = log_config.get("data_dir", "data")
- # 配置日志输出
- logger.remove()
+ os.makedirs(log_dir, exist_ok=True)
+ os.makedirs(data_dir, exist_ok=True)
- # 输出到控制台
- logger.add(sys.stdout, format=log_format, level=log_level, filter=formatter)
+ # 配置日志输出
+ logger.remove()
- # 输出到文件
- logger.add(
- os.path.join(log_dir, log_file),
- format=log_format_file,
- level=log_level,
- filter=formatter,
- )
+ # 输出到控制台
+ logger.add(sys.stdout, format=log_format, level=log_level, filter=formatter)
+
+ # 输出到文件
+ logger.add(
+ os.path.join(log_dir, log_file),
+ format=log_format_file,
+ level=log_level,
+ filter=formatter,
+ )
+ _logger_initialized = True # 标记为已初始化
return logger
+
+
+def update_module_string(selected_module_str):
+ """更新模块字符串并重新配置日志处理器"""
+ logger.debug(f"更新日志配置组件")
+ current_module = logger._core.extra["selected_module"]
+
+ if current_module == selected_module_str:
+ return
+
+ try:
+ logger.configure(extra={"selected_module": selected_module_str})
+
+ config = load_config()
+ log_config = config["log"]
+
+ log_format = log_config.get(
+ "log_format",
+ "{time:YYMMDD HH:mm:ss}[{version}_{extra[selected_module]}][{extra[tag]}]-{level}-{message}",
+ )
+ log_format_file = log_config.get(
+ "log_format_file",
+ "{time:YYYY-MM-DD HH:mm:ss} - {version_{extra[selected_module]}} - {name} - {level} - {extra[tag]} - {message}",
+ )
+
+ log_format = log_format.replace("{version}", SERVER_VERSION)
+ log_format = log_format.replace("{selected_module}", selected_module_str)
+ log_format_file = log_format_file.replace("{version}", SERVER_VERSION)
+ log_format_file = log_format_file.replace("{selected_module}", selected_module_str)
+
+ logger.remove()
+ logger.add(sys.stdout, format=log_format, level=log_config.get("log_level", "INFO"), filter=formatter)
+ logger.add(
+ os.path.join(log_config.get("log_dir", "tmp"), log_config.get("log_file", "server.log")),
+ format=log_format_file,
+ level=log_config.get("log_level", "INFO"),
+ filter=formatter
+ )
+
+ except Exception as e:
+ logger.error(f"日志配置更新失败: {str(e)}")
+ raise
diff --git a/main/xiaozhi-server/core/connection.py b/main/xiaozhi-server/core/connection.py
index ea0be02d..5d6b0328 100644
--- a/main/xiaozhi-server/core/connection.py
+++ b/main/xiaozhi-server/core/connection.py
@@ -13,7 +13,7 @@ import threading
import websockets
from typing import Dict, Any
from plugins_func.loadplugins import auto_import_modules
-from config.logger import setup_logging
+from config.logger import setup_logging, build_module_string, update_module_string
from config.config_loader import get_project_dir
from core.utils import p3
from core.utils.dialogue import Message, Dialogue
@@ -351,6 +351,8 @@ class ConnectionHandler:
def _initialize_private_config(self):
"""如果是从配置文件获取,则进行二次实例化"""
if not self.read_config_from_api:
+ self.selected_module_str = build_module_string(self.config.get("selected_module", {}))
+ update_module_string(self.selected_module_str)
return
"""从接口获取差异化的配置进行二次实例化,非全量重新实例化"""
try:
@@ -429,6 +431,10 @@ class ConnectionHandler:
init_memory,
init_intent,
)
+ # 在初始化组件后更新模块字符串
+ self.selected_module_str = build_module_string(self.config.get("selected_module", {}))
+ # 更新日志模块配置
+ update_module_string(self.selected_module_str)
except Exception as e:
self.logger.bind(tag=TAG).error(f"初始化组件失败: {e}")
modules = {}