[Feature] 添加src/utils/logger文件控制程序日志输出,包括一个root配置器和logger生成器。
This commit is contained in:
parent
9d522fa137
commit
66c9477e4b
@ -5,16 +5,12 @@
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import logging
|
from src.utils.logger import get_module_logger
|
||||||
from typing import List, Optional, Union
|
from typing import List, Optional, Union
|
||||||
from src.models import AudioBinary_Config
|
from src.models import AudioBinary_Config
|
||||||
|
|
||||||
# 配置日志
|
# 配置日志
|
||||||
logging.basicConfig(
|
logger = get_module_logger(__name__, level="INFO")
|
||||||
level=logging.INFO,
|
|
||||||
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
|
|
||||||
)
|
|
||||||
logger = logging.getLogger('AudioChunk')
|
|
||||||
|
|
||||||
class AudioChunk:
|
class AudioChunk:
|
||||||
"""音频数据块管理类,用于存储和处理16KHz音频数据"""
|
"""音频数据块管理类,用于存储和处理16KHz音频数据"""
|
||||||
|
@ -4,15 +4,10 @@
|
|||||||
逻辑触发器类 - 用于处理音频数据并触发相应的处理逻辑
|
逻辑触发器类 - 用于处理音频数据并触发相应的处理逻辑
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import logging
|
from src.utils.logger import get_module_logger
|
||||||
from typing import Any, Dict, Type, Callable
|
from typing import Any, Dict, Type, Callable
|
||||||
|
|
||||||
# 配置日志
|
# 配置日志
|
||||||
logging.basicConfig(
|
logger = get_module_logger(__name__, level="INFO")
|
||||||
level=logging.INFO,
|
|
||||||
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
|
|
||||||
)
|
|
||||||
logger = logging.getLogger('LogicTrager')
|
|
||||||
|
|
||||||
class AutoAfterMeta(type):
|
class AutoAfterMeta(type):
|
||||||
"""
|
"""
|
||||||
@ -143,7 +138,7 @@ class LogicTrager(metaclass=AutoAfterMeta):
|
|||||||
"""
|
"""
|
||||||
音频处理
|
音频处理
|
||||||
"""
|
"""
|
||||||
print("LogicTrager push_audio_chunk [{}ms:{}ms] (len={})".format(chunk.start_time, chunk.end_time, len(chunk.chunk)))
|
logger.info("LogicTrager push_audio_chunk [{}ms:{}ms] (len={})".format(chunk.start_time, chunk.end_time, len(chunk.chunk)))
|
||||||
self._audio_chunk.append(chunk)
|
self._audio_chunk.append(chunk)
|
||||||
|
|
||||||
def __after__push_audio_chunk(self) -> None:
|
def __after__push_audio_chunk(self) -> None:
|
||||||
|
91
src/utils/logger.py
Normal file
91
src/utils/logger.py
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
import logging
|
||||||
|
import sys
|
||||||
|
from pathlib import Path
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
|
def setup_logger(
|
||||||
|
name: str = None,
|
||||||
|
level: str = "INFO",
|
||||||
|
log_file: Optional[str] = None,
|
||||||
|
log_format: str = "%(asctime)s - %(name)s - %(levelname)s - %(message)s",
|
||||||
|
date_format: str = "%Y-%m-%d %H:%M:%S",
|
||||||
|
) -> logging.Logger:
|
||||||
|
"""
|
||||||
|
设置并返回一个配置好的logger实例
|
||||||
|
|
||||||
|
Args:
|
||||||
|
name: logger的名称,默认为None(使用root logger)
|
||||||
|
level: 日志级别,默认为"INFO"
|
||||||
|
log_file: 日志文件路径,默认为None(仅控制台输出)
|
||||||
|
log_format: 日志格式
|
||||||
|
date_format: 日期格式
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
logging.Logger: 配置好的logger实例
|
||||||
|
"""
|
||||||
|
# 获取logger实例
|
||||||
|
logger = logging.getLogger(name)
|
||||||
|
|
||||||
|
# 设置日志级别
|
||||||
|
level = getattr(logging, level.upper())
|
||||||
|
logger.setLevel(level)
|
||||||
|
|
||||||
|
print(f"添加处理器 {name} {log_file} {log_format} {date_format}")
|
||||||
|
# 创建格式器
|
||||||
|
formatter = logging.Formatter(log_format, date_format)
|
||||||
|
|
||||||
|
# 添加控制台处理器
|
||||||
|
console_handler = logging.StreamHandler(sys.stdout)
|
||||||
|
console_handler.setFormatter(formatter)
|
||||||
|
logger.addHandler(console_handler)
|
||||||
|
|
||||||
|
# 如果指定了日志文件,添加文件处理器
|
||||||
|
if log_file:
|
||||||
|
# 确保日志目录存在
|
||||||
|
log_path = Path(log_file)
|
||||||
|
log_path.parent.mkdir(parents=True, exist_ok=True)
|
||||||
|
|
||||||
|
file_handler = logging.FileHandler(log_file, encoding='utf-8')
|
||||||
|
file_handler.setFormatter(formatter)
|
||||||
|
logger.addHandler(file_handler)
|
||||||
|
|
||||||
|
# 注意:移除了 propagate = False,允许日志传递
|
||||||
|
return logger
|
||||||
|
|
||||||
|
def setup_root_logger(
|
||||||
|
level: str = "INFO",
|
||||||
|
log_file: Optional[str] = None
|
||||||
|
) -> None:
|
||||||
|
"""
|
||||||
|
配置根日志器
|
||||||
|
|
||||||
|
Args:
|
||||||
|
level: 日志级别
|
||||||
|
log_file: 日志文件路径
|
||||||
|
"""
|
||||||
|
setup_logger(None, level, log_file)
|
||||||
|
|
||||||
|
def get_module_logger(
|
||||||
|
module_name: str,
|
||||||
|
level: Optional[str] = None, # 改为可选参数
|
||||||
|
log_file: Optional[str] = None # 一般不需要单独指定
|
||||||
|
) -> logging.Logger:
|
||||||
|
"""
|
||||||
|
获取模块级别的logger
|
||||||
|
|
||||||
|
Args:
|
||||||
|
module_name: 模块名称,通常传入__name__
|
||||||
|
level: 可选的日志级别,如果不指定则继承父级配置
|
||||||
|
log_file: 可选的日志文件路径,一般不需要指定
|
||||||
|
"""
|
||||||
|
logger = logging.getLogger(module_name)
|
||||||
|
|
||||||
|
# 只有显式指定了level才设置
|
||||||
|
if level:
|
||||||
|
logger.setLevel(getattr(logging, level.upper()))
|
||||||
|
|
||||||
|
# 只有显式指定了log_file才添加文件处理器
|
||||||
|
if log_file:
|
||||||
|
setup_logger(module_name, level or "INFO", log_file)
|
||||||
|
|
||||||
|
return logger
|
12
test_main.py
12
test_main.py
@ -1,4 +1,14 @@
|
|||||||
|
from src.utils.logger import get_module_logger, setup_root_logger
|
||||||
from tests.modelsuse import vad_model_use_online_logic
|
from tests.modelsuse import vad_model_use_online_logic
|
||||||
|
|
||||||
|
setup_root_logger(level="INFO",log_file="logs/test_main.log")
|
||||||
|
|
||||||
|
logger = get_module_logger(__name__)
|
||||||
|
|
||||||
|
logger.info("开始测试")
|
||||||
vad_result = vad_model_use_online_logic("tests/vad_example.wav")
|
vad_result = vad_model_use_online_logic("tests/vad_example.wav")
|
||||||
print(vad_result)
|
logger.info("测试结束")
|
||||||
|
if vad_result is None:
|
||||||
|
logger.warning("VAD结果为空")
|
||||||
|
else:
|
||||||
|
logger.info(f"VAD结果: {vad_result}")
|
Loading…
x
Reference in New Issue
Block a user