在项目中出现了重复日志的问题,主要原因是:
StreamHandler
创建了 app/utils/logger_config.py
提供统一的日志配置功能:
from app.utils.logger_config import get_api_logger
# 在API模块中使用
logger = get_api_logger(__name__)
logger.info("这是API日志")
# ✅ 正确的配置方式
logger = logging.getLogger(__name__)
if not logger.handlers: # 检查是否已配置
logger.setLevel(logging.INFO)
handler = logging.StreamHandler()
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.propagate = False # 关闭传播,避免重复输出
# ❌ 错误的配置方式(会导致重复日志)
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
handler = logging.StreamHandler() # 每次都添加新的处理器
logger.addHandler(handler) # 重复添加处理器
from app.utils.logger_config import get_api_logger
logger = get_api_logger(__name__)
logger.info("API操作日志")
from app.utils.logger_config import get_service_logger
logger = get_service_logger(__name__)
logger.info("业务逻辑日志")
from app.utils.logger_config import get_utils_logger
logger = get_utils_logger(__name__)
logger.info("工具函数日志")
已修复以下文件中的重复日志配置:
app/api/water.py
- 添加了处理器检查和传播控制app/api/cd_flux.py
- 添加了处理器检查和传播控制app/services/cd_flux_service.py
- 添加了处理器检查和传播控制app/utils/mapping_utils.py
- 已经有正确的配置运行演示脚本来验证修复效果:
conda activate GeoSys
python scripts/demos/logging_demo.py
app/utils/logger_config.py
中的函数if not logger.handlers:
logger.propagate = False
避免重复输出__init__
方法中配置,避免每次调用都重新配置