mirror of
https://github.com/xinnan-tech/xiaozhi-esp32-server.git
synced 2026-07-26 17:13:54 +08:00
update:恢复最初的日志模块
This commit is contained in:
@@ -3,16 +3,15 @@ import sys
|
|||||||
from loguru import logger
|
from loguru import logger
|
||||||
from config.config_loader import load_config
|
from config.config_loader import load_config
|
||||||
from config.settings import check_config_file
|
from config.settings import check_config_file
|
||||||
from datetime import datetime
|
|
||||||
|
|
||||||
SERVER_VERSION = "0.5.2"
|
SERVER_VERSION = "0.5.4"
|
||||||
_logger_initialized = False
|
_logger_initialized = False
|
||||||
_current_log_file = None
|
|
||||||
_current_log_size = 0
|
|
||||||
_max_log_size = 10 * 1024 * 1024 # 10MB
|
|
||||||
|
|
||||||
def get_module_abbreviation(module_name, module_dict):
|
def get_module_abbreviation(module_name, module_dict):
|
||||||
"""获取模块名称的缩写,如果为空则返回00"""
|
"""获取模块名称的缩写,如果为空则返回00
|
||||||
|
如果名称中包含下划线,则返回下划线后面的前两个字符
|
||||||
|
"""
|
||||||
module_value = module_dict.get(module_name, "")
|
module_value = module_dict.get(module_name, "")
|
||||||
if not module_value:
|
if not module_value:
|
||||||
return "00"
|
return "00"
|
||||||
@@ -21,6 +20,7 @@ def get_module_abbreviation(module_name, module_dict):
|
|||||||
return parts[-1][:2] if parts[-1] else "00"
|
return parts[-1][:2] if parts[-1] else "00"
|
||||||
return module_value[:2]
|
return module_value[:2]
|
||||||
|
|
||||||
|
|
||||||
def build_module_string(selected_module):
|
def build_module_string(selected_module):
|
||||||
"""构建模块字符串"""
|
"""构建模块字符串"""
|
||||||
return (
|
return (
|
||||||
@@ -32,59 +32,12 @@ def build_module_string(selected_module):
|
|||||||
+ get_module_abbreviation("Intent", selected_module)
|
+ get_module_abbreviation("Intent", selected_module)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def formatter(record):
|
def formatter(record):
|
||||||
"""为没有 tag 的日志添加默认值"""
|
"""为没有 tag 的日志添加默认值"""
|
||||||
record["extra"].setdefault("tag", record["name"])
|
record["extra"].setdefault("tag", record["name"])
|
||||||
return record["message"]
|
return record["message"]
|
||||||
|
|
||||||
def get_log_filename(log_dir, base_name):
|
|
||||||
"""生成按日期和大小分割的日志文件名"""
|
|
||||||
global _current_log_file, _current_log_size
|
|
||||||
|
|
||||||
now = datetime.now()
|
|
||||||
date_part = f"{now.month}.{now.day}"
|
|
||||||
|
|
||||||
# 检查是否需要创建新文件
|
|
||||||
if _current_log_file is None or not os.path.exists(_current_log_file):
|
|
||||||
file_index = 1
|
|
||||||
while True:
|
|
||||||
new_filename = os.path.join(log_dir, f"{base_name}.{date_part}.{file_index}")
|
|
||||||
if not os.path.exists(new_filename):
|
|
||||||
_current_log_file = new_filename
|
|
||||||
_current_log_size = 0
|
|
||||||
return new_filename
|
|
||||||
# 如果文件已存在,增加索引
|
|
||||||
file_index += 1
|
|
||||||
else:
|
|
||||||
# 检查文件大小
|
|
||||||
if _current_log_size > _max_log_size:
|
|
||||||
# 文件过大,创建新文件
|
|
||||||
base_path = os.path.splitext(_current_log_file)[0]
|
|
||||||
parts = base_path.split('.')
|
|
||||||
if len(parts) >= 3:
|
|
||||||
try:
|
|
||||||
file_index = int(parts[-1]) + 1
|
|
||||||
except ValueError:
|
|
||||||
file_index = 1
|
|
||||||
else:
|
|
||||||
file_index = 1
|
|
||||||
|
|
||||||
new_filename = f"{base_path.rsplit('.', 1)[0]}.{file_index}"
|
|
||||||
_current_log_file = new_filename
|
|
||||||
_current_log_size = 0
|
|
||||||
return new_filename
|
|
||||||
else:
|
|
||||||
return _current_log_file
|
|
||||||
|
|
||||||
def update_log_size(message):
|
|
||||||
"""更新当前日志文件大小"""
|
|
||||||
global _current_log_size
|
|
||||||
# 如果当前日志文件存在,获取其大小
|
|
||||||
if _current_log_file and os.path.exists(_current_log_file):
|
|
||||||
_current_log_size = os.path.getsize(_current_log_file)
|
|
||||||
else:
|
|
||||||
# 如果当前日志文件不存在,重置大小
|
|
||||||
_current_log_size = len(message.encode('utf-8'))
|
|
||||||
|
|
||||||
def setup_logging():
|
def setup_logging():
|
||||||
check_config_file()
|
check_config_file()
|
||||||
@@ -99,7 +52,7 @@ def setup_logging():
|
|||||||
extra={
|
extra={
|
||||||
"selected_module": log_config.get("selected_module", "00000000000000")
|
"selected_module": log_config.get("selected_module", "00000000000000")
|
||||||
}
|
}
|
||||||
)
|
) # 新增配置
|
||||||
log_format = log_config.get(
|
log_format = log_config.get(
|
||||||
"log_format",
|
"log_format",
|
||||||
"<green>{time:YYMMDD HH:mm:ss}</green>[{version}_{extra[selected_module]}][<light-blue>{extra[tag]}</light-blue>]-<level>{level}</level>-<light-green>{message}</light-green>",
|
"<green>{time:YYMMDD HH:mm:ss}</green>[{version}_{extra[selected_module]}][<light-blue>{extra[tag]}</light-blue>]-<level>{level}</level>-<light-green>{message}</light-green>",
|
||||||
@@ -119,7 +72,7 @@ def setup_logging():
|
|||||||
|
|
||||||
log_level = log_config.get("log_level", "INFO")
|
log_level = log_config.get("log_level", "INFO")
|
||||||
log_dir = log_config.get("log_dir", "tmp")
|
log_dir = log_config.get("log_dir", "tmp")
|
||||||
log_file = log_config.get("log_file", "server")
|
log_file = log_config.get("log_file", "server.log")
|
||||||
data_dir = log_config.get("data_dir", "data")
|
data_dir = log_config.get("data_dir", "data")
|
||||||
|
|
||||||
os.makedirs(log_dir, exist_ok=True)
|
os.makedirs(log_dir, exist_ok=True)
|
||||||
@@ -131,23 +84,18 @@ def setup_logging():
|
|||||||
# 输出到控制台
|
# 输出到控制台
|
||||||
logger.add(sys.stdout, format=log_format, level=log_level, filter=formatter)
|
logger.add(sys.stdout, format=log_format, level=log_level, filter=formatter)
|
||||||
|
|
||||||
# 输出到文件,使用自定义的日志文件名生成器
|
# 输出到文件
|
||||||
def sink(message):
|
|
||||||
filename = get_log_filename(log_dir, log_file)
|
|
||||||
with open(filename, "a", encoding="utf-8") as f:
|
|
||||||
f.write(message + "\n")
|
|
||||||
update_log_size(message)
|
|
||||||
|
|
||||||
logger.add(
|
logger.add(
|
||||||
sink,
|
os.path.join(log_dir, log_file),
|
||||||
format=log_format_file,
|
format=log_format_file,
|
||||||
level=log_level,
|
level=log_level,
|
||||||
filter=formatter,
|
filter=formatter,
|
||||||
)
|
)
|
||||||
_logger_initialized = True
|
_logger_initialized = True # 标记为已初始化
|
||||||
|
|
||||||
return logger
|
return logger
|
||||||
|
|
||||||
|
|
||||||
def update_module_string(selected_module_str):
|
def update_module_string(selected_module_str):
|
||||||
"""更新模块字符串并重新配置日志处理器"""
|
"""更新模块字符串并重新配置日志处理器"""
|
||||||
logger.debug(f"更新日志配置组件")
|
logger.debug(f"更新日志配置组件")
|
||||||
@@ -178,9 +126,6 @@ def update_module_string(selected_module_str):
|
|||||||
"{selected_module}", selected_module_str
|
"{selected_module}", selected_module_str
|
||||||
)
|
)
|
||||||
|
|
||||||
log_dir = log_config.get("log_dir", "tmp")
|
|
||||||
log_file = log_config.get("log_file", "server")
|
|
||||||
|
|
||||||
logger.remove()
|
logger.remove()
|
||||||
logger.add(
|
logger.add(
|
||||||
sys.stdout,
|
sys.stdout,
|
||||||
@@ -188,15 +133,11 @@ def update_module_string(selected_module_str):
|
|||||||
level=log_config.get("log_level", "INFO"),
|
level=log_config.get("log_level", "INFO"),
|
||||||
filter=formatter,
|
filter=formatter,
|
||||||
)
|
)
|
||||||
|
|
||||||
def sink(message):
|
|
||||||
filename = get_log_filename(log_dir, log_file)
|
|
||||||
with open(filename, "a", encoding="utf-8") as f:
|
|
||||||
f.write(message + "\n")
|
|
||||||
update_log_size(message)
|
|
||||||
|
|
||||||
logger.add(
|
logger.add(
|
||||||
sink,
|
os.path.join(
|
||||||
|
log_config.get("log_dir", "tmp"),
|
||||||
|
log_config.get("log_file", "server.log"),
|
||||||
|
),
|
||||||
format=log_format_file,
|
format=log_format_file,
|
||||||
level=log_config.get("log_level", "INFO"),
|
level=log_config.get("log_level", "INFO"),
|
||||||
filter=formatter,
|
filter=formatter,
|
||||||
|
|||||||
Reference in New Issue
Block a user