refactor(logger): 替换print为logger并添加自定义日志样式支持
将配置文件加载中的print语句替换为logger.info,以统一日志输出。同时新增log_decorators.py文件,提供自定义日志样式的装饰器支持,并在logger.py中实现自定义样式处理器的添加和移除功能。
This commit is contained in:
107
src/common/log_decorators.py
Normal file
107
src/common/log_decorators.py
Normal file
@@ -0,0 +1,107 @@
|
|||||||
|
import functools
|
||||||
|
import inspect
|
||||||
|
from typing import Callable, Any
|
||||||
|
from .logger import logger, add_custom_style_handler
|
||||||
|
|
||||||
|
|
||||||
|
def use_log_style(
|
||||||
|
style_name: str,
|
||||||
|
console_format: str,
|
||||||
|
console_level: str = "INFO",
|
||||||
|
# file_format: Optional[str] = None, # 暂未支持文件输出
|
||||||
|
# file_level: str = "DEBUG",
|
||||||
|
) -> Callable:
|
||||||
|
"""装饰器:为函数内的日志启用特定的自定义样式。
|
||||||
|
|
||||||
|
Args:
|
||||||
|
style_name (str): 自定义样式的唯一名称。
|
||||||
|
console_format (str): 控制台输出的格式字符串。
|
||||||
|
console_level (str, optional): 控制台日志级别. Defaults to "INFO".
|
||||||
|
# file_format (Optional[str], optional): 文件输出格式 (暂未支持). Defaults to None.
|
||||||
|
# file_level (str, optional): 文件日志级别 (暂未支持). Defaults to "DEBUG".
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Callable: 返回装饰器本身。
|
||||||
|
"""
|
||||||
|
|
||||||
|
def decorator(func: Callable) -> Callable:
|
||||||
|
# 获取被装饰函数所在的模块名
|
||||||
|
module = inspect.getmodule(func)
|
||||||
|
if module is None:
|
||||||
|
# 如果无法获取模块(例如,在交互式解释器中定义函数),则使用默认名称
|
||||||
|
module_name = "unknown_module"
|
||||||
|
logger.warning(f"无法确定函数 {func.__name__} 的模块,将使用 '{module_name}'")
|
||||||
|
else:
|
||||||
|
module_name = module.__name__
|
||||||
|
|
||||||
|
# 在函数首次被调用(或模块加载时)确保自定义处理器已添加
|
||||||
|
# 注意:这会在模块加载时执行,而不是每次函数调用时
|
||||||
|
# print(f"Setting up custom style '{style_name}' for module '{module_name}' in decorator definition")
|
||||||
|
add_custom_style_handler(
|
||||||
|
module_name=module_name,
|
||||||
|
style_name=style_name,
|
||||||
|
console_format=console_format,
|
||||||
|
console_level=console_level,
|
||||||
|
# file_format=file_format,
|
||||||
|
# file_level=file_level,
|
||||||
|
)
|
||||||
|
|
||||||
|
@functools.wraps(func)
|
||||||
|
def wrapper(*args: Any, **kwargs: Any) -> Any:
|
||||||
|
# 创建绑定了模块名和自定义样式标记的 logger 实例
|
||||||
|
custom_logger = logger.bind(module=module_name, custom_style=style_name)
|
||||||
|
# print(f"Executing {func.__name__} with custom logger for style '{style_name}'")
|
||||||
|
# 将自定义 logger 作为第一个参数传递给原函数
|
||||||
|
# 注意:这要求被装饰的函数第一个参数用于接收 logger
|
||||||
|
try:
|
||||||
|
return func(custom_logger, *args, **kwargs)
|
||||||
|
except TypeError as e:
|
||||||
|
# 捕获可能的类型错误,比如原函数不接受 logger 参数
|
||||||
|
logger.error(
|
||||||
|
f"调用 {func.__name__} 时出错:请确保该函数接受一个 logger 实例作为其第一个参数。错误:{e}"
|
||||||
|
)
|
||||||
|
# 可以选择重新抛出异常或返回特定值
|
||||||
|
raise e
|
||||||
|
|
||||||
|
return wrapper
|
||||||
|
|
||||||
|
return decorator
|
||||||
|
|
||||||
|
|
||||||
|
# --- 示例用法 (可以在其他模块中这样使用) ---
|
||||||
|
|
||||||
|
# # 假设这是你的模块 my_module.py
|
||||||
|
# from src.common.log_decorators import use_log_style
|
||||||
|
# from src.common.logger import get_module_logger, LoguruLogger
|
||||||
|
|
||||||
|
# # 获取模块的标准 logger
|
||||||
|
# standard_logger = get_module_logger(__name__)
|
||||||
|
|
||||||
|
# # 定义一个自定义样式
|
||||||
|
# MY_SPECIAL_STYLE = "special"
|
||||||
|
# MY_SPECIAL_FORMAT = "<bg yellow><black> SPECIAL [{time:HH:mm:ss}] </black></bg yellow> | <level>{message}</level>"
|
||||||
|
|
||||||
|
# @use_log_style(style_name=MY_SPECIAL_STYLE, console_format=MY_SPECIAL_FORMAT)
|
||||||
|
# def my_function_with_special_logs(custom_logger: LoguruLogger, x: int, y: int):
|
||||||
|
# standard_logger.info("这是一条使用标准格式的日志")
|
||||||
|
# custom_logger.info(f"开始执行特殊操作,参数: x={x}, y={y}")
|
||||||
|
# result = x + y
|
||||||
|
# custom_logger.success(f"特殊操作完成,结果: {result}")
|
||||||
|
# standard_logger.info("标准格式日志:函数即将结束")
|
||||||
|
# return result
|
||||||
|
|
||||||
|
# @use_log_style(style_name="another_style", console_format="<cyan>任务:</cyan> {message}")
|
||||||
|
# def another_task(task_logger: LoguruLogger, task_name: str):
|
||||||
|
# standard_logger.debug("准备执行另一个任务")
|
||||||
|
# task_logger.info(f"正在处理任务 '{task_name}'")
|
||||||
|
# # ... 执行任务 ...
|
||||||
|
# task_logger.warning("任务处理中遇到一个警告")
|
||||||
|
# standard_logger.info("另一个任务的标准日志")
|
||||||
|
|
||||||
|
# if __name__ == "__main__":
|
||||||
|
# print("\n--- 调用 my_function_with_special_logs ---")
|
||||||
|
# my_function_with_special_logs(10, 5)
|
||||||
|
# print("\n--- 调用 another_task ---")
|
||||||
|
# another_task("数据清理")
|
||||||
|
# print("\n--- 单独使用标准 logger ---")
|
||||||
|
# standard_logger.info("这是一条完全独立的标准日志")
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
from loguru import logger
|
from loguru import logger
|
||||||
from typing import Dict, Optional, Union, List
|
from typing import Dict, Optional, Union, List, Tuple
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
from types import ModuleType
|
from types import ModuleType
|
||||||
@@ -26,6 +26,7 @@ LoguruLogger = logger.__class__
|
|||||||
|
|
||||||
# 全局注册表:记录模块与处理器ID的映射
|
# 全局注册表:记录模块与处理器ID的映射
|
||||||
_handler_registry: Dict[str, List[int]] = {}
|
_handler_registry: Dict[str, List[int]] = {}
|
||||||
|
_custom_style_handlers: Dict[Tuple[str, str], List[int]] = {} # 记录自定义样式处理器ID
|
||||||
|
|
||||||
# 获取日志存储根地址
|
# 获取日志存储根地址
|
||||||
current_file_path = Path(__file__).resolve()
|
current_file_path = Path(__file__).resolve()
|
||||||
@@ -42,8 +43,7 @@ if not SIMPLE_OUTPUT:
|
|||||||
"file_level": "DEBUG",
|
"file_level": "DEBUG",
|
||||||
# 格式配置
|
# 格式配置
|
||||||
"console_format": (
|
"console_format": (
|
||||||
"<green>{time:YYYY-MM-DD HH:mm:ss}</green> | "
|
"<level>{time:YYYY-MM-DD HH:mm:ss}</level> | "
|
||||||
"<level>{level: <8}</level> | "
|
|
||||||
"<cyan>{extra[module]: <12}</cyan> | "
|
"<cyan>{extra[module]: <12}</cyan> | "
|
||||||
"<level>{message}</level>"
|
"<level>{message}</level>"
|
||||||
),
|
),
|
||||||
@@ -59,7 +59,7 @@ else:
|
|||||||
"console_level": "INFO",
|
"console_level": "INFO",
|
||||||
"file_level": "DEBUG",
|
"file_level": "DEBUG",
|
||||||
# 格式配置
|
# 格式配置
|
||||||
"console_format": "<green>{time:MM-DD HH:mm}</green> | <cyan>{extra[module]}</cyan> | {message}",
|
"console_format": "<level>{time:MM-DD HH:mm}</level> | <cyan>{extra[module]}</cyan> | {message}",
|
||||||
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | {message}",
|
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | {message}",
|
||||||
"log_dir": LOG_ROOT,
|
"log_dir": LOG_ROOT,
|
||||||
"rotation": "00:00",
|
"rotation": "00:00",
|
||||||
@@ -72,8 +72,8 @@ else:
|
|||||||
MEMORY_STYLE_CONFIG = {
|
MEMORY_STYLE_CONFIG = {
|
||||||
"advanced": {
|
"advanced": {
|
||||||
"console_format": (
|
"console_format": (
|
||||||
"<green>{time:YYYY-MM-DD HH:mm:ss}</green> | "
|
"<white>{time:YYYY-MM-DD HH:mm:ss}</white> | "
|
||||||
"<level>{level: <8}</level> | "
|
"{level: <8} | "
|
||||||
"<cyan>{extra[module]: <12}</cyan> | "
|
"<cyan>{extra[module]: <12}</cyan> | "
|
||||||
"<light-yellow>海马体</light-yellow> | "
|
"<light-yellow>海马体</light-yellow> | "
|
||||||
"<level>{message}</level>"
|
"<level>{message}</level>"
|
||||||
@@ -82,7 +82,7 @@ MEMORY_STYLE_CONFIG = {
|
|||||||
},
|
},
|
||||||
"simple": {
|
"simple": {
|
||||||
"console_format": (
|
"console_format": (
|
||||||
"<green>{time:MM-DD HH:mm}</green> | <light-yellow>海马体</light-yellow> | <light-yellow>{message}</light-yellow>"
|
"<level>{time:MM-DD HH:mm}</level> | <light-yellow>海马体</light-yellow> | <light-yellow>{message}</light-yellow>"
|
||||||
),
|
),
|
||||||
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 海马体 | {message}",
|
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 海马体 | {message}",
|
||||||
},
|
},
|
||||||
@@ -92,8 +92,8 @@ MEMORY_STYLE_CONFIG = {
|
|||||||
PFC_STYLE_CONFIG = {
|
PFC_STYLE_CONFIG = {
|
||||||
"advanced": {
|
"advanced": {
|
||||||
"console_format": (
|
"console_format": (
|
||||||
"<green>{time:YYYY-MM-DD HH:mm:ss}</green> | "
|
"<white>{time:YYYY-MM-DD HH:mm:ss}</white> | "
|
||||||
"<level>{level: <8}</level> | "
|
"{level: <8} | "
|
||||||
"<cyan>{extra[module]: <12}</cyan> | "
|
"<cyan>{extra[module]: <12}</cyan> | "
|
||||||
"<light-yellow>PFC</light-yellow> | "
|
"<light-yellow>PFC</light-yellow> | "
|
||||||
"<level>{message}</level>"
|
"<level>{message}</level>"
|
||||||
@@ -102,7 +102,7 @@ PFC_STYLE_CONFIG = {
|
|||||||
},
|
},
|
||||||
"simple": {
|
"simple": {
|
||||||
"console_format": (
|
"console_format": (
|
||||||
"<green>{time:MM-DD HH:mm}</green> | <light-green>PFC</light-green> | <light-green>{message}</light-green>"
|
"<level>{time:MM-DD HH:mm}</level> | <light-green>PFC</light-green> | <light-green>{message}</light-green>"
|
||||||
),
|
),
|
||||||
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | PFC | {message}",
|
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | PFC | {message}",
|
||||||
},
|
},
|
||||||
@@ -112,8 +112,8 @@ PFC_STYLE_CONFIG = {
|
|||||||
MOOD_STYLE_CONFIG = {
|
MOOD_STYLE_CONFIG = {
|
||||||
"advanced": {
|
"advanced": {
|
||||||
"console_format": (
|
"console_format": (
|
||||||
"<green>{time:YYYY-MM-DD HH:mm:ss}</green> | "
|
"<white>{time:YYYY-MM-DD HH:mm:ss}</white> | "
|
||||||
"<level>{level: <8}</level> | "
|
"{level: <8} | "
|
||||||
"<cyan>{extra[module]: <12}</cyan> | "
|
"<cyan>{extra[module]: <12}</cyan> | "
|
||||||
"<light-green>心情</light-green> | "
|
"<light-green>心情</light-green> | "
|
||||||
"<level>{message}</level>"
|
"<level>{message}</level>"
|
||||||
@@ -121,7 +121,7 @@ MOOD_STYLE_CONFIG = {
|
|||||||
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 心情 | {message}",
|
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 心情 | {message}",
|
||||||
},
|
},
|
||||||
"simple": {
|
"simple": {
|
||||||
"console_format": "<green>{time:MM-DD HH:mm}</green> | <magenta>心情</magenta> | {message}",
|
"console_format": "<level>{time:MM-DD HH:mm}</level> | <magenta>心情</magenta> | {message}",
|
||||||
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 心情 | {message}",
|
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 心情 | {message}",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@@ -129,8 +129,8 @@ MOOD_STYLE_CONFIG = {
|
|||||||
TOOL_USE_STYLE_CONFIG = {
|
TOOL_USE_STYLE_CONFIG = {
|
||||||
"advanced": {
|
"advanced": {
|
||||||
"console_format": (
|
"console_format": (
|
||||||
"<green>{time:YYYY-MM-DD HH:mm:ss}</green> | "
|
"<white>{time:YYYY-MM-DD HH:mm:ss}</white> | "
|
||||||
"<level>{level: <8}</level> | "
|
"{level: <8} | "
|
||||||
"<cyan>{extra[module]: <12}</cyan> | "
|
"<cyan>{extra[module]: <12}</cyan> | "
|
||||||
"<magenta>工具使用</magenta> | "
|
"<magenta>工具使用</magenta> | "
|
||||||
"<level>{message}</level>"
|
"<level>{message}</level>"
|
||||||
@@ -138,7 +138,7 @@ TOOL_USE_STYLE_CONFIG = {
|
|||||||
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 工具使用 | {message}",
|
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 工具使用 | {message}",
|
||||||
},
|
},
|
||||||
"simple": {
|
"simple": {
|
||||||
"console_format": "<green>{time:MM-DD HH:mm}</green> | <magenta>工具使用</magenta> | {message}",
|
"console_format": "<level>{time:MM-DD HH:mm}</level> | <magenta>工具使用</magenta> | {message}",
|
||||||
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 工具使用 | {message}",
|
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 工具使用 | {message}",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@@ -148,8 +148,8 @@ TOOL_USE_STYLE_CONFIG = {
|
|||||||
RELATION_STYLE_CONFIG = {
|
RELATION_STYLE_CONFIG = {
|
||||||
"advanced": {
|
"advanced": {
|
||||||
"console_format": (
|
"console_format": (
|
||||||
"<green>{time:YYYY-MM-DD HH:mm:ss}</green> | "
|
"<white>{time:YYYY-MM-DD HH:mm:ss}</white> | "
|
||||||
"<level>{level: <8}</level> | "
|
"{level: <8} | "
|
||||||
"<cyan>{extra[module]: <12}</cyan> | "
|
"<cyan>{extra[module]: <12}</cyan> | "
|
||||||
"<light-magenta>关系</light-magenta> | "
|
"<light-magenta>关系</light-magenta> | "
|
||||||
"<level>{message}</level>"
|
"<level>{message}</level>"
|
||||||
@@ -157,7 +157,7 @@ RELATION_STYLE_CONFIG = {
|
|||||||
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 关系 | {message}",
|
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 关系 | {message}",
|
||||||
},
|
},
|
||||||
"simple": {
|
"simple": {
|
||||||
"console_format": "<green>{time:MM-DD HH:mm}</green> | <light-magenta>关系</light-magenta> | {message}",
|
"console_format": "<level>{time:MM-DD HH:mm}</level> | <light-magenta>关系</light-magenta> | {message}",
|
||||||
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 关系 | {message}",
|
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 关系 | {message}",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@@ -166,8 +166,8 @@ RELATION_STYLE_CONFIG = {
|
|||||||
CONFIG_STYLE_CONFIG = {
|
CONFIG_STYLE_CONFIG = {
|
||||||
"advanced": {
|
"advanced": {
|
||||||
"console_format": (
|
"console_format": (
|
||||||
"<green>{time:YYYY-MM-DD HH:mm:ss}</green> | "
|
"<white>{time:YYYY-MM-DD HH:mm:ss}</white> | "
|
||||||
"<level>{level: <8}</level> | "
|
"{level: <8} | "
|
||||||
"<cyan>{extra[module]: <12}</cyan> | "
|
"<cyan>{extra[module]: <12}</cyan> | "
|
||||||
"<light-cyan>配置</light-cyan> | "
|
"<light-cyan>配置</light-cyan> | "
|
||||||
"<level>{message}</level>"
|
"<level>{message}</level>"
|
||||||
@@ -175,7 +175,7 @@ CONFIG_STYLE_CONFIG = {
|
|||||||
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 配置 | {message}",
|
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 配置 | {message}",
|
||||||
},
|
},
|
||||||
"simple": {
|
"simple": {
|
||||||
"console_format": "<green>{time:MM-DD HH:mm}</green> | <light-cyan>配置</light-cyan> | {message}",
|
"console_format": "<level>{time:MM-DD HH:mm}</level> | <light-cyan>配置</light-cyan> | {message}",
|
||||||
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 配置 | {message}",
|
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 配置 | {message}",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@@ -183,8 +183,8 @@ CONFIG_STYLE_CONFIG = {
|
|||||||
SENDER_STYLE_CONFIG = {
|
SENDER_STYLE_CONFIG = {
|
||||||
"advanced": {
|
"advanced": {
|
||||||
"console_format": (
|
"console_format": (
|
||||||
"<green>{time:YYYY-MM-DD HH:mm:ss}</green> | "
|
"<white>{time:YYYY-MM-DD HH:mm:ss}</white> | "
|
||||||
"<level>{level: <8}</level> | "
|
"{level: <8} | "
|
||||||
"<cyan>{extra[module]: <12}</cyan> | "
|
"<cyan>{extra[module]: <12}</cyan> | "
|
||||||
"<light-yellow>消息发送</light-yellow> | "
|
"<light-yellow>消息发送</light-yellow> | "
|
||||||
"<level>{message}</level>"
|
"<level>{message}</level>"
|
||||||
@@ -192,7 +192,7 @@ SENDER_STYLE_CONFIG = {
|
|||||||
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 消息发送 | {message}",
|
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 消息发送 | {message}",
|
||||||
},
|
},
|
||||||
"simple": {
|
"simple": {
|
||||||
"console_format": "<green>{time:MM-DD HH:mm}</green> | <green>消息发送</green> | {message}",
|
"console_format": "<level>{time:MM-DD HH:mm}</level> | <green>消息发送</green> | {message}",
|
||||||
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 消息发送 | {message}",
|
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 消息发送 | {message}",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@@ -200,8 +200,8 @@ SENDER_STYLE_CONFIG = {
|
|||||||
HEARTFLOW_STYLE_CONFIG = {
|
HEARTFLOW_STYLE_CONFIG = {
|
||||||
"advanced": {
|
"advanced": {
|
||||||
"console_format": (
|
"console_format": (
|
||||||
"<green>{time:YYYY-MM-DD HH:mm:ss}</green> | "
|
"<white>{time:YYYY-MM-DD HH:mm:ss}</white> | "
|
||||||
"<level>{level: <8}</level> | "
|
"{level: <8} | "
|
||||||
"<cyan>{extra[module]: <12}</cyan> | "
|
"<cyan>{extra[module]: <12}</cyan> | "
|
||||||
"<light-yellow>麦麦大脑袋</light-yellow> | "
|
"<light-yellow>麦麦大脑袋</light-yellow> | "
|
||||||
"<level>{message}</level>"
|
"<level>{message}</level>"
|
||||||
@@ -210,7 +210,7 @@ HEARTFLOW_STYLE_CONFIG = {
|
|||||||
},
|
},
|
||||||
"simple": {
|
"simple": {
|
||||||
"console_format": (
|
"console_format": (
|
||||||
"<green>{time:MM-DD HH:mm}</green> | <light-green>麦麦大脑袋</light-green> | <light-green>{message}</light-green>"
|
"<level>{time:MM-DD HH:mm}</level> | <light-green>麦麦大脑袋</light-green> | <light-green>{message}</light-green>"
|
||||||
), # noqa: E501
|
), # noqa: E501
|
||||||
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 麦麦大脑袋 | {message}",
|
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 麦麦大脑袋 | {message}",
|
||||||
},
|
},
|
||||||
@@ -219,8 +219,8 @@ HEARTFLOW_STYLE_CONFIG = {
|
|||||||
SCHEDULE_STYLE_CONFIG = {
|
SCHEDULE_STYLE_CONFIG = {
|
||||||
"advanced": {
|
"advanced": {
|
||||||
"console_format": (
|
"console_format": (
|
||||||
"<green>{time:YYYY-MM-DD HH:mm:ss}</green> | "
|
"<white>{time:YYYY-MM-DD HH:mm:ss}</white> | "
|
||||||
"<level>{level: <8}</level> | "
|
"{level: <8} | "
|
||||||
"<cyan>{extra[module]: <12}</cyan> | "
|
"<cyan>{extra[module]: <12}</cyan> | "
|
||||||
"<light-yellow>在干嘛</light-yellow> | "
|
"<light-yellow>在干嘛</light-yellow> | "
|
||||||
"<level>{message}</level>"
|
"<level>{message}</level>"
|
||||||
@@ -228,7 +228,7 @@ SCHEDULE_STYLE_CONFIG = {
|
|||||||
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 在干嘛 | {message}",
|
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 在干嘛 | {message}",
|
||||||
},
|
},
|
||||||
"simple": {
|
"simple": {
|
||||||
"console_format": "<green>{time:MM-DD HH:mm}</green> | <cyan>在干嘛</cyan> | <cyan>{message}</cyan>",
|
"console_format": "<level>{time:MM-DD HH:mm}</level> | <cyan>在干嘛</cyan> | <cyan>{message}</cyan>",
|
||||||
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 在干嘛 | {message}",
|
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 在干嘛 | {message}",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@@ -236,8 +236,8 @@ SCHEDULE_STYLE_CONFIG = {
|
|||||||
LLM_STYLE_CONFIG = {
|
LLM_STYLE_CONFIG = {
|
||||||
"advanced": {
|
"advanced": {
|
||||||
"console_format": (
|
"console_format": (
|
||||||
"<green>{time:YYYY-MM-DD HH:mm:ss}</green> | "
|
"<white>{time:YYYY-MM-DD HH:mm:ss}</white> | "
|
||||||
"<level>{level: <8}</level> | "
|
"{level: <8} | "
|
||||||
"<cyan>{extra[module]: <12}</cyan> | "
|
"<cyan>{extra[module]: <12}</cyan> | "
|
||||||
"<light-yellow>麦麦组织语言</light-yellow> | "
|
"<light-yellow>麦麦组织语言</light-yellow> | "
|
||||||
"<level>{message}</level>"
|
"<level>{message}</level>"
|
||||||
@@ -245,7 +245,7 @@ LLM_STYLE_CONFIG = {
|
|||||||
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 麦麦组织语言 | {message}",
|
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 麦麦组织语言 | {message}",
|
||||||
},
|
},
|
||||||
"simple": {
|
"simple": {
|
||||||
"console_format": "<green>{time:MM-DD HH:mm}</green> | <light-green>麦麦组织语言</light-green> | {message}",
|
"console_format": "<level>{time:MM-DD HH:mm}</level> | <light-green>麦麦组织语言</light-green> | {message}",
|
||||||
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 麦麦组织语言 | {message}",
|
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 麦麦组织语言 | {message}",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@@ -255,8 +255,8 @@ LLM_STYLE_CONFIG = {
|
|||||||
TOPIC_STYLE_CONFIG = {
|
TOPIC_STYLE_CONFIG = {
|
||||||
"advanced": {
|
"advanced": {
|
||||||
"console_format": (
|
"console_format": (
|
||||||
"<green>{time:YYYY-MM-DD HH:mm:ss}</green> | "
|
"<white>{time:YYYY-MM-DD HH:mm:ss}</white> | "
|
||||||
"<level>{level: <8}</level> | "
|
"{level: <8} | "
|
||||||
"<cyan>{extra[module]: <12}</cyan> | "
|
"<cyan>{extra[module]: <12}</cyan> | "
|
||||||
"<light-blue>话题</light-blue> | "
|
"<light-blue>话题</light-blue> | "
|
||||||
"<level>{message}</level>"
|
"<level>{message}</level>"
|
||||||
@@ -264,7 +264,7 @@ TOPIC_STYLE_CONFIG = {
|
|||||||
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 话题 | {message}",
|
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 话题 | {message}",
|
||||||
},
|
},
|
||||||
"simple": {
|
"simple": {
|
||||||
"console_format": "<green>{time:MM-DD HH:mm}</green> | <light-blue>主题</light-blue> | {message}",
|
"console_format": "<level>{time:MM-DD HH:mm}</level> | <light-blue>主题</light-blue> | {message}",
|
||||||
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 话题 | {message}",
|
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 话题 | {message}",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@@ -273,8 +273,8 @@ TOPIC_STYLE_CONFIG = {
|
|||||||
CHAT_STYLE_CONFIG = {
|
CHAT_STYLE_CONFIG = {
|
||||||
"advanced": {
|
"advanced": {
|
||||||
"console_format": (
|
"console_format": (
|
||||||
"<green>{time:YYYY-MM-DD HH:mm:ss}</green> | "
|
"<white>{time:YYYY-MM-DD HH:mm:ss}</white> | "
|
||||||
"<level>{level: <8}</level> | "
|
"{level: <8} | "
|
||||||
"<cyan>{extra[module]: <12}</cyan> | "
|
"<cyan>{extra[module]: <12}</cyan> | "
|
||||||
"<light-blue>见闻</light-blue> | "
|
"<light-blue>见闻</light-blue> | "
|
||||||
"<level>{message}</level>"
|
"<level>{message}</level>"
|
||||||
@@ -283,7 +283,7 @@ CHAT_STYLE_CONFIG = {
|
|||||||
},
|
},
|
||||||
"simple": {
|
"simple": {
|
||||||
"console_format": (
|
"console_format": (
|
||||||
"<green>{time:MM-DD HH:mm}</green> | <light-blue>见闻</light-blue> | <green>{message}</green>"
|
"<level>{time:MM-DD HH:mm}</level> | <light-blue>见闻</light-blue> | <green>{message}</green>"
|
||||||
), # noqa: E501
|
), # noqa: E501
|
||||||
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 见闻 | {message}",
|
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 见闻 | {message}",
|
||||||
},
|
},
|
||||||
@@ -292,8 +292,8 @@ CHAT_STYLE_CONFIG = {
|
|||||||
SUB_HEARTFLOW_STYLE_CONFIG = {
|
SUB_HEARTFLOW_STYLE_CONFIG = {
|
||||||
"advanced": {
|
"advanced": {
|
||||||
"console_format": (
|
"console_format": (
|
||||||
"<green>{time:YYYY-MM-DD HH:mm:ss}</green> | "
|
"<white>{time:YYYY-MM-DD HH:mm:ss}</white> | "
|
||||||
"<level>{level: <8}</level> | "
|
"{level: <8} | "
|
||||||
"<cyan>{extra[module]: <12}</cyan> | "
|
"<cyan>{extra[module]: <12}</cyan> | "
|
||||||
"<light-blue>麦麦小脑袋</light-blue> | "
|
"<light-blue>麦麦小脑袋</light-blue> | "
|
||||||
"<level>{message}</level>"
|
"<level>{message}</level>"
|
||||||
@@ -302,7 +302,7 @@ SUB_HEARTFLOW_STYLE_CONFIG = {
|
|||||||
},
|
},
|
||||||
"simple": {
|
"simple": {
|
||||||
"console_format": (
|
"console_format": (
|
||||||
"<green>{time:MM-DD HH:mm}</green> | <light-blue>麦麦小脑袋</light-blue> | <light-blue>{message}</light-blue>"
|
"<level>{time:MM-DD HH:mm}</level> | <light-blue>麦麦小脑袋</light-blue> | <light-blue>{message}</light-blue>"
|
||||||
), # noqa: E501
|
), # noqa: E501
|
||||||
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 麦麦小脑袋 | {message}",
|
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 麦麦小脑袋 | {message}",
|
||||||
},
|
},
|
||||||
@@ -311,8 +311,8 @@ SUB_HEARTFLOW_STYLE_CONFIG = {
|
|||||||
WILLING_STYLE_CONFIG = {
|
WILLING_STYLE_CONFIG = {
|
||||||
"advanced": {
|
"advanced": {
|
||||||
"console_format": (
|
"console_format": (
|
||||||
"<green>{time:YYYY-MM-DD HH:mm:ss}</green> | "
|
"<white>{time:YYYY-MM-DD HH:mm:ss}</white> | "
|
||||||
"<level>{level: <8}</level> | "
|
"{level: <8} | "
|
||||||
"<cyan>{extra[module]: <12}</cyan> | "
|
"<cyan>{extra[module]: <12}</cyan> | "
|
||||||
"<light-blue>意愿</light-blue> | "
|
"<light-blue>意愿</light-blue> | "
|
||||||
"<level>{message}</level>"
|
"<level>{message}</level>"
|
||||||
@@ -320,7 +320,7 @@ WILLING_STYLE_CONFIG = {
|
|||||||
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 意愿 | {message}",
|
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 意愿 | {message}",
|
||||||
},
|
},
|
||||||
"simple": {
|
"simple": {
|
||||||
"console_format": "<green>{time:MM-DD HH:mm}</green> | <light-blue>意愿 | {message} </light-blue>", # noqa: E501
|
"console_format": "<level>{time:MM-DD HH:mm}</level> | <light-blue>意愿 | {message} </light-blue>", # noqa: E501
|
||||||
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 意愿 | {message}",
|
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 意愿 | {message}",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@@ -329,8 +329,8 @@ WILLING_STYLE_CONFIG = {
|
|||||||
MAI_STATE_CONFIG = {
|
MAI_STATE_CONFIG = {
|
||||||
"advanced": {
|
"advanced": {
|
||||||
"console_format": (
|
"console_format": (
|
||||||
"<green>{time:YYYY-MM-DD HH:mm:ss}</green> | "
|
"<white>{time:YYYY-MM-DD HH:mm:ss}</white> | "
|
||||||
"<level>{level: <8}</level> | "
|
"{level: <8} | "
|
||||||
"<cyan>{extra[module]: <12}</cyan> | "
|
"<cyan>{extra[module]: <12}</cyan> | "
|
||||||
"<light-blue>麦麦状态</light-blue> | "
|
"<light-blue>麦麦状态</light-blue> | "
|
||||||
"<level>{message}</level>"
|
"<level>{message}</level>"
|
||||||
@@ -338,7 +338,7 @@ MAI_STATE_CONFIG = {
|
|||||||
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 麦麦状态 | {message}",
|
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 麦麦状态 | {message}",
|
||||||
},
|
},
|
||||||
"simple": {
|
"simple": {
|
||||||
"console_format": "<green>{time:MM-DD HH:mm}</green> | <light-blue>麦麦状态 | {message} </light-blue>", # noqa: E501
|
"console_format": "<level>{time:MM-DD HH:mm}</level> | <light-blue>麦麦状态 | {message} </light-blue>", # noqa: E501
|
||||||
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 麦麦状态 | {message}",
|
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | 麦麦状态 | {message}",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@@ -347,8 +347,8 @@ MAI_STATE_CONFIG = {
|
|||||||
LPMM_STYLE_CONFIG = {
|
LPMM_STYLE_CONFIG = {
|
||||||
"advanced": {
|
"advanced": {
|
||||||
"console_format": (
|
"console_format": (
|
||||||
"<green>{time:YYYY-MM-DD HH:mm:ss}</green> | "
|
"<white>{time:YYYY-MM-DD HH:mm:ss}</white> | "
|
||||||
"<level>{level: <8}</level> | "
|
"{level: <8} | "
|
||||||
"<cyan>{extra[module]: <12}</cyan> | "
|
"<cyan>{extra[module]: <12}</cyan> | "
|
||||||
"<light-yellow>LPMM</light-yellow> | "
|
"<light-yellow>LPMM</light-yellow> | "
|
||||||
"<level>{message}</level>"
|
"<level>{message}</level>"
|
||||||
@@ -357,7 +357,7 @@ LPMM_STYLE_CONFIG = {
|
|||||||
},
|
},
|
||||||
"simple": {
|
"simple": {
|
||||||
"console_format": (
|
"console_format": (
|
||||||
"<green>{time:MM-DD HH:mm}</green> | <light-green>LPMM</light-green> | <light-green>{message}</light-green>"
|
"<level>{time:MM-DD HH:mm}</level> | <light-green>LPMM</light-green> | <light-green>{message}</light-green>"
|
||||||
),
|
),
|
||||||
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | LPMM | {message}",
|
"file_format": "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {extra[module]: <15} | LPMM | {message}",
|
||||||
},
|
},
|
||||||
@@ -451,7 +451,7 @@ def get_module_logger(
|
|||||||
sink=sys.stderr,
|
sink=sys.stderr,
|
||||||
level=os.getenv("CONSOLE_LOG_LEVEL", console_level or current_config["console_level"]),
|
level=os.getenv("CONSOLE_LOG_LEVEL", console_level or current_config["console_level"]),
|
||||||
format=current_config["console_format"],
|
format=current_config["console_format"],
|
||||||
filter=lambda record: record["extra"].get("module") == module_name,
|
filter=lambda record: record["extra"].get("module") == module_name and 'custom_style' not in record['extra'],
|
||||||
enqueue=True,
|
enqueue=True,
|
||||||
)
|
)
|
||||||
handler_ids.append(console_id)
|
handler_ids.append(console_id)
|
||||||
@@ -470,7 +470,7 @@ def get_module_logger(
|
|||||||
retention=current_config["retention"],
|
retention=current_config["retention"],
|
||||||
compression=current_config["compression"],
|
compression=current_config["compression"],
|
||||||
encoding="utf-8",
|
encoding="utf-8",
|
||||||
filter=lambda record: record["extra"].get("module") == module_name,
|
filter=lambda record: record["extra"].get("module") == module_name and 'custom_style' not in record['extra'],
|
||||||
enqueue=True,
|
enqueue=True,
|
||||||
)
|
)
|
||||||
handler_ids.append(file_id)
|
handler_ids.append(file_id)
|
||||||
@@ -487,6 +487,87 @@ def get_module_logger(
|
|||||||
return logger.bind(module=module_name)
|
return logger.bind(module=module_name)
|
||||||
|
|
||||||
|
|
||||||
|
def add_custom_style_handler(
|
||||||
|
module_name: str,
|
||||||
|
style_name: str,
|
||||||
|
console_format: str,
|
||||||
|
console_level: str = "INFO",
|
||||||
|
# file_format: Optional[str] = None, # 暂时只支持控制台
|
||||||
|
# file_level: str = "DEBUG",
|
||||||
|
# config: Optional[LogConfig] = None, # 暂时不使用全局配置
|
||||||
|
) -> None:
|
||||||
|
"""为指定模块和样式名添加自定义日志处理器(目前仅支持控制台)."""
|
||||||
|
handler_key = (module_name, style_name)
|
||||||
|
|
||||||
|
# 如果已存在该模块和样式的处理器,则不重复添加
|
||||||
|
if handler_key in _custom_style_handlers:
|
||||||
|
# print(f"Custom handler for {handler_key} already exists.")
|
||||||
|
return
|
||||||
|
|
||||||
|
handler_ids = []
|
||||||
|
|
||||||
|
# 添加自定义控制台处理器
|
||||||
|
try:
|
||||||
|
custom_console_id = logger.add(
|
||||||
|
sink=sys.stderr,
|
||||||
|
level=os.getenv(f"{module_name.upper()}_{style_name.upper()}_CONSOLE_LEVEL", console_level),
|
||||||
|
format=console_format,
|
||||||
|
filter=lambda record: record["extra"].get("module") == module_name
|
||||||
|
and record["extra"].get("custom_style") == style_name,
|
||||||
|
enqueue=True,
|
||||||
|
)
|
||||||
|
handler_ids.append(custom_console_id)
|
||||||
|
# print(f"Added custom console handler {custom_console_id} for {handler_key}")
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"Failed to add custom console handler for {handler_key}: {e}")
|
||||||
|
# 如果添加失败,确保列表为空,避免记录不存在的ID
|
||||||
|
handler_ids = []
|
||||||
|
|
||||||
|
# # 文件处理器 (可选,按需启用)
|
||||||
|
# if file_format:
|
||||||
|
# current_config = config.config if config else DEFAULT_CONFIG
|
||||||
|
# log_dir = Path(current_config["log_dir"])
|
||||||
|
# log_dir.mkdir(parents=True, exist_ok=True)
|
||||||
|
# # 可以考虑将自定义样式的日志写入单独文件或模块主文件
|
||||||
|
# log_file = log_dir / module_name / f"{style_name}_{{time:YYYY-MM-DD}}.log"
|
||||||
|
# log_file.parent.mkdir(parents=True, exist_ok=True)
|
||||||
|
# try:
|
||||||
|
# custom_file_id = logger.add(
|
||||||
|
# sink=str(log_file),
|
||||||
|
# level=os.getenv(f"{module_name.upper()}_{style_name.upper()}_FILE_LEVEL", file_level),
|
||||||
|
# format=file_format,
|
||||||
|
# rotation=current_config["rotation"],
|
||||||
|
# retention=current_config["retention"],
|
||||||
|
# compression=current_config["compression"],
|
||||||
|
# encoding="utf-8",
|
||||||
|
# filter=lambda record: record["extra"].get("module") == module_name
|
||||||
|
# and record["extra"].get("custom_style") == style_name,
|
||||||
|
# enqueue=True,
|
||||||
|
# )
|
||||||
|
# handler_ids.append(custom_file_id)
|
||||||
|
# except Exception as e:
|
||||||
|
# logger.error(f"Failed to add custom file handler for {handler_key}: {e}")
|
||||||
|
|
||||||
|
# 更新自定义处理器注册表
|
||||||
|
if handler_ids:
|
||||||
|
_custom_style_handlers[handler_key] = handler_ids
|
||||||
|
|
||||||
|
|
||||||
|
def remove_custom_style_handler(module_name: str, style_name: str) -> None:
|
||||||
|
"""移除指定模块和样式名的自定义日志处理器."""
|
||||||
|
handler_key = (module_name, style_name)
|
||||||
|
if handler_key in _custom_style_handlers:
|
||||||
|
for handler_id in _custom_style_handlers[handler_key]:
|
||||||
|
try:
|
||||||
|
logger.remove(handler_id)
|
||||||
|
# print(f"Removed custom handler {handler_id} for {handler_key}")
|
||||||
|
except ValueError:
|
||||||
|
# 可能已经被移除或不存在
|
||||||
|
# print(f"Handler {handler_id} for {handler_key} already removed or invalid.")
|
||||||
|
pass
|
||||||
|
del _custom_style_handlers[handler_key]
|
||||||
|
|
||||||
|
|
||||||
def remove_module_logger(module_name: str) -> None:
|
def remove_module_logger(module_name: str) -> None:
|
||||||
"""清理指定模块的日志处理器"""
|
"""清理指定模块的日志处理器"""
|
||||||
if module_name in _handler_registry:
|
if module_name in _handler_registry:
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import os
|
|||||||
import toml
|
import toml
|
||||||
import sys
|
import sys
|
||||||
import argparse
|
import argparse
|
||||||
|
from .global_logger import logger
|
||||||
|
|
||||||
PG_NAMESPACE = "paragraph"
|
PG_NAMESPACE = "paragraph"
|
||||||
ENT_NAMESPACE = "entity"
|
ENT_NAMESPACE = "entity"
|
||||||
@@ -63,8 +64,8 @@ def _load_config(config, config_file_path):
|
|||||||
|
|
||||||
if "persistence" in file_config:
|
if "persistence" in file_config:
|
||||||
config["persistence"] = file_config["persistence"]
|
config["persistence"] = file_config["persistence"]
|
||||||
print(config)
|
# print(config)
|
||||||
print("Configurations loaded from file: ", config_file_path)
|
logger.info(f"从文件中读取配置: {config_file_path}")
|
||||||
|
|
||||||
|
|
||||||
parser = argparse.ArgumentParser(description="Configurations for the pipeline")
|
parser = argparse.ArgumentParser(description="Configurations for the pipeline")
|
||||||
|
|||||||
Reference in New Issue
Block a user