From b1688950c45ff3d3b5eb2caf9baf14b45bab6b77 Mon Sep 17 00:00:00 2001 From: lanceyq <1982376970@qq.com> Date: Mon, 9 Feb 2026 20:49:28 +0800 Subject: [PATCH] [fix]Added entity type matching and filtered out the 00NA0 status code. --- api/app/core/logging_config.py | 21 ++++++++++++--------- api/app/services/memory_storage_service.py | 9 ++++----- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/api/app/core/logging_config.py b/api/app/core/logging_config.py index 1e6c066e..40259b46 100644 --- a/api/app/core/logging_config.py +++ b/api/app/core/logging_config.py @@ -39,10 +39,13 @@ class SensitiveDataLoggingFilter(logging.Filter): class Neo4jSuccessNotificationFilter(logging.Filter): - """Neo4j 日志过滤器:过滤成功状态的通知,保留真正的警告和错误 + """Neo4j 日志过滤器:过滤成功/信息性状态的通知,保留真正的警告和错误 Neo4j 驱动会以 WARNING 级别记录所有数据库通知,包括成功的操作。 - 这个过滤器会过滤掉状态码为 '00000' (成功) 的通知,只保留真正的警告和错误。 + 这个过滤器会过滤掉以下 GQL 状态码的通知,只保留真正的警告和错误: + - 00000: 成功完成 (successful completion) + - 00N00: 无数据 (no data) + - 00NA0: 无数据,信息性通知 (no data, informational notification) 使用正则表达式进行更严格的匹配,避免误过滤无关的警告。 """ @@ -50,12 +53,12 @@ class Neo4jSuccessNotificationFilter(logging.Filter): import re # 编译正则表达式以提高性能 - # 匹配 gql_status='00000' 或 gql_status="00000",确保是完整的状态码 - GQL_STATUS_PATTERN = re.compile(r"gql_status=['\"]00000['\"]") + # 匹配所有"成功/信息性"的 GQL 状态码: + # 00000 = 成功完成, 00N00 = 无数据, 00NA0 = 无数据信息性通知 + GQL_STATUS_PATTERN = re.compile(r"gql_status=['\"](00000|00N00|00NA0)['\"]") - # 匹配 status_description 中的成功完成消息 - # 使用单词边界确保精确匹配 - SUCCESS_DESC_PATTERN = re.compile(r"status_description=['\"]note:\s*successful\s+completion['\"]", re.IGNORECASE) + # 匹配 status_description 中的成功完成或信息性通知消息 + SUCCESS_DESC_PATTERN = re.compile(r"status_description=['\"]note:\s*(successful\s+completion|no\s+data)['\"]", re.IGNORECASE) def filter(self, record: logging.LogRecord) -> bool: """ @@ -107,8 +110,8 @@ class LoggingConfig: root_logger = logging.getLogger() root_logger.setLevel(getattr(logging, settings.LOG_LEVEL.upper())) - # 为 Neo4j 驱动添加过滤器,过滤成功通知但保留真正的警告 - # Neo4j 驱动会以 WARNING 级别记录所有数据库通知,包括成功的操作(status='00000') + # 为 Neo4j 驱动添加过滤器,过滤成功/信息性通知但保留真正的警告 + # Neo4j 驱动会以 WARNING 级别记录所有数据库通知,包括成功(00000)和信息性(00NA0)通知 # 使用过滤器而不是改变日志级别,这样可以保留真正的警告和错误 neo4j_filter = Neo4jSuccessNotificationFilter() for neo4j_logger_name in ["neo4j", "neo4j.io", "neo4j.pool"]: diff --git a/api/app/services/memory_storage_service.py b/api/app/services/memory_storage_service.py index 16dc88c9..1083f750 100644 --- a/api/app/services/memory_storage_service.py +++ b/api/app/services/memory_storage_service.py @@ -399,25 +399,24 @@ class DataConfigService: # 数据配置服务类(PostgreSQL) with open(result_path, "r", encoding="utf-8") as rf: extracted_result = json.load(rf) - # 步骤 6: 发出结果事件 + # 步骤 6: 计算本体覆盖率并合并到结果中 result_data = { "config_id": cid, "time_log": os.path.join(project_root, "logs", "time.log"), "extracted_result": extracted_result, } - yield format_sse_message("result", result_data) - - # 步骤 6.5: 计算本体覆盖率统计并发出 try: ontology_coverage = await self._compute_ontology_coverage( extracted_result=extracted_result, memory_config=memory_config, ) if ontology_coverage: - yield format_sse_message("ontology_coverage", ontology_coverage) + result_data["ontology_coverage"] = ontology_coverage except Exception as cov_err: logger.warning(f"[PILOT_RUN_STREAM] Ontology coverage computation failed: {cov_err}", exc_info=True) + yield format_sse_message("result", result_data) + # 步骤 7: 发出完成事件 yield format_sse_message("done", { "message": "试运行完成",