修改错误的日志调用

This commit is contained in:
Tian jianyong 2025-11-07 16:07:38 +08:00
parent e6e1965289
commit c7e16eed9c

View File

@ -201,7 +201,7 @@ def get_aircraft_route_params():
"data": None
}), 404
logging.info(f"进港路由参数查询: flightNo={flight_no}, params={route_params}")
logger.info(f"进港路由参数查询: flightNo={flight_no}, params={route_params}")
return jsonify({
"status": 200,
"msg": "进港路由参数查询成功",
@ -225,7 +225,7 @@ def get_aircraft_route_params():
"data": None
}), 404
logging.info(f"出港路由参数查询: flightNo={flight_no}, params={route_params}")
logger.info(f"出港路由参数查询: flightNo={flight_no}, params={route_params}")
return jsonify({
"status": 200,
"msg": "出港路由参数查询成功",
@ -1069,11 +1069,11 @@ def convert_route_to_cgcs2000(route_data: dict) -> dict:
try:
# 检查当前坐标系类型
current_coordinate_system = route_data.get("coordinateSystem", "WGS84")
logging.info(f"转换路由数据坐标系: 当前={current_coordinate_system} -> 目标=CGCS2000")
logger.info(f"转换路由数据坐标系: 当前={current_coordinate_system} -> 目标=CGCS2000")
# 如果已经是CGCS2000坐标系直接返回
if current_coordinate_system == "CGCS2000":
logging.info("路由数据已经是CGCS2000坐标系无需转换")
logger.info("路由数据已经是CGCS2000坐标系无需转换")
return converted_route
# 如果是WGS84坐标系需要转换为CGCS2000
@ -1081,7 +1081,7 @@ def convert_route_to_cgcs2000(route_data: dict) -> dict:
geo_path = converted_route.get("geoPath", {})
features = geo_path.get("features", [])
logging.info(f"开始转换WGS84坐标到CGCS2000共有 {len(features)} 个feature")
logger.info(f"开始转换WGS84坐标到CGCS2000共有 {len(features)} 个feature")
for feature in features:
geometry = feature.get("geometry", {})
@ -1099,7 +1099,7 @@ def convert_route_to_cgcs2000(route_data: dict) -> dict:
x, y = coordinate_system.wgs84_to_cgcs2000(latitude, longitude)
converted_coordinates.append([x, y])
logging.debug(f"WGS84坐标转换: lon={longitude}, lat={latitude} -> CGCS2000: x={x}, y={y}")
logger.debug(f"WGS84坐标转换: lon={longitude}, lat={latitude} -> CGCS2000: x={x}, y={y}")
# 更新坐标数据
geometry["coordinates"] = converted_coordinates
@ -1107,12 +1107,12 @@ def convert_route_to_cgcs2000(route_data: dict) -> dict:
# 更新坐标系标识
converted_route["coordinateSystem"] = "CGCS2000"
logging.info(f"WGS84到CGCS2000坐标转换完成共转换 {len(features)} 个feature")
logger.info(f"WGS84到CGCS2000坐标转换完成共转换 {len(features)} 个feature")
return converted_route
except Exception as e:
logging.error(f"路由数据坐标转换失败: {str(e)}")
logger.error(f"路由数据坐标转换失败: {str(e)}")
# 转换失败时返回原始数据但确保坐标系标识为CGCS2000
converted_route["coordinateSystem"] = "CGCS2000"
return converted_route
@ -1135,9 +1135,9 @@ def merge_discontinuous_route_for_flight(route_data: dict, flight_no: str) -> di
codes_str = route_data.get("codes", "")
if codes_str:
code_order = [code.strip() for code in codes_str.split(",")]
logging.info(f"航班 {flight_no} codes顺序: {code_order}")
logger.info(f"航班 {flight_no} codes顺序: {code_order}")
else:
logging.warning(f"航班 {flight_no} 缺少codes字段无法验证方向")
logger.warning(f"航班 {flight_no} 缺少codes字段无法验证方向")
code_order = []
# 收集所有LineString路径段并记录每段的code标识
@ -1161,7 +1161,7 @@ def merge_discontinuous_route_for_flight(route_data: dict, flight_no: str) -> di
# 如果成功合并为单条路径
if isinstance(merged_geometry, LineString):
continuous_coords = list(merged_geometry.coords)
logging.info(f"✅ 航班 {flight_no} 合并为连续路径,包含 {len(continuous_coords)} 个坐标点")
logger.info(f"✅ 航班 {flight_no} 合并为连续路径,包含 {len(continuous_coords)} 个坐标点")
# 基于codes字段验证和修正路径方向
if len(code_order) >= 2:
@ -1182,14 +1182,14 @@ def merge_discontinuous_route_for_flight(route_data: dict, flight_no: str) -> di
else:
# 无法合并就报错,不能保持原样掩盖问题
error_msg = f"❌ 航班 {flight_no} 路径无法合并为连续路径,存在不连续段"
logging.error(error_msg)
logger.error(error_msg)
raise RuntimeError(error_msg)
except ImportError:
logging.warning(f"Shapely库未安装跳过路径合并")
logger.warning(f"Shapely库未安装跳过路径合并")
return route_data
except Exception as e:
logging.error(f"航班 {flight_no} 路径合并失败: {str(e)}")
logger.error(f"航班 {flight_no} 路径合并失败: {str(e)}")
return route_data
@ -1224,26 +1224,26 @@ def _verify_and_correct_path_direction(continuous_coords: list, original_feature
start_code = find_point_code(continuous_coords[0])
end_code = find_point_code(continuous_coords[-1])
logging.info(f"航班 {flight_no} 端点检查: 起点在{start_code}, 终点在{end_code}, 期望顺序{code_order}")
logger.info(f"航班 {flight_no} 端点检查: 起点在{start_code}, 终点在{end_code}, 期望顺序{code_order}")
# 检查方向是否正确 - 只使用实际存在的路径段codes进行判断
expected_start = code_order[0] # F1
# 对于MU5123进港应该从F1开始但终点138不是路径段code所以检查起点即可
logging.info(f"航班 {flight_no} 方向检查: 期望从{expected_start}开始, 实际起点{start_code}, 终点{end_code}")
logger.info(f"航班 {flight_no} 方向检查: 期望从{expected_start}开始, 实际起点{start_code}, 终点{end_code}")
# 通用路径方向检查逻辑
if start_code == expected_start:
logging.info(f"✅ 航班 {flight_no} 路径方向正确: 从{expected_start}开始")
logger.info(f"✅ 航班 {flight_no} 路径方向正确: 从{expected_start}开始")
else:
# 方向相反,需要反转
continuous_coords.reverse()
logging.info(f"✅ 航班 {flight_no} 路径方向已修正: 从{expected_start}开始 (原起点: {start_code})")
logger.info(f"✅ 航班 {flight_no} 路径方向已修正: 从{expected_start}开始 (原起点: {start_code})")
return continuous_coords
except Exception as e:
logging.error(f"航班 {flight_no} 路径方向验证失败: {str(e)}")
logger.error(f"航班 {flight_no} 路径方向验证失败: {str(e)}")
return continuous_coords
def validate_route_data_integrity(route_data: dict, flight_no: str) -> dict:
@ -1262,10 +1262,10 @@ def validate_route_data_integrity(route_data: dict, flight_no: str) -> dict:
features = geo_path.get("features", [])
if len(features) == 0:
logging.warning(f"⚠️ 航班 {flight_no} 路径数据为空,无路径段")
logger.warning(f"⚠️ 航班 {flight_no} 路径数据为空,无路径段")
return route_data
logging.info(f"✅ 航班 {flight_no} 路径数据完整:包含 {len(features)} 个路径段")
logger.info(f"✅ 航班 {flight_no} 路径数据完整:包含 {len(features)} 个路径段")
# 验证每个路径段的数据完整性
valid_segments = 0
@ -1282,22 +1282,22 @@ def validate_route_data_integrity(route_data: dict, flight_no: str) -> dict:
if len(coordinates) >= 2:
valid_segments += 1
total_coordinates += len(coordinates)
logging.debug(f" 路径段 {i+1}: 代码={code}, 坐标点数={len(coordinates)}")
logger.debug(f" 路径段 {i+1}: 代码={code}, 坐标点数={len(coordinates)}")
else:
logging.warning(f" 路径段 {i+1}: 代码={code}, 坐标点数不足({len(coordinates)}) ⚠️")
logger.warning(f" 路径段 {i+1}: 代码={code}, 坐标点数不足({len(coordinates)}) ⚠️")
else:
logging.warning(f" 路径段 {i+1}: 非LineString类型 ({geometry.get('type')}) ⚠️")
logger.warning(f" 路径段 {i+1}: 非LineString类型 ({geometry.get('type')}) ⚠️")
logging.info(f"✅ 航班 {flight_no} 数据验证完成:{valid_segments}/{len(features)} 有效路径段,共 {total_coordinates} 个坐标点")
logger.info(f"✅ 航班 {flight_no} 数据验证完成:{valid_segments}/{len(features)} 有效路径段,共 {total_coordinates} 个坐标点")
# 验证坐标系信息
coordinate_system = route_data.get("coordinateSystem", "未知")
logging.info(f"✅ 航班 {flight_no} 坐标系:{coordinate_system}")
logger.info(f"✅ 航班 {flight_no} 坐标系:{coordinate_system}")
return route_data
except Exception as e:
logging.error(f"航班 {flight_no} 路径数据完整性验证异常: {str(e)}")
logger.error(f"航班 {flight_no} 路径数据完整性验证异常: {str(e)}")
return route_data
def parse_route_path(route_data: dict) -> list[tuple[float, float]]:
@ -1315,12 +1315,12 @@ def parse_route_path(route_data: dict) -> list[tuple[float, float]]:
try:
# 检查坐标系类型
coordinate_system_type = route_data.get("coordinateSystem", "CGCS2000")
logging.info(f"路由数据坐标系: {coordinate_system_type}")
logger.info(f"路由数据坐标系: {coordinate_system_type}")
geo_path = route_data.get("geoPath", {})
features = geo_path.get("features", [])
logging.info(f"解析路径,共有 {len(features)} 个feature")
logger.info(f"解析路径,共有 {len(features)} 个feature")
for feature in features:
geometry = feature.get("geometry", {})
@ -1335,23 +1335,23 @@ def parse_route_path(route_data: dict) -> list[tuple[float, float]]:
if coordinate_system_type == "WGS84":
# 如果已经是WGS84坐标直接使用 (经度, 纬度)
lat, lon = y, x
logging.debug(f"WGS84坐标直接使用: lon={lon}, lat={lat}")
logger.debug(f"WGS84坐标直接使用: lon={lon}, lat={lat}")
else:
# 如果是CGCS2000坐标需要转换
lat, lon = coordinate_system.cgcs2000_to_wgs84(x, y)
logging.debug(f"CGCS2000坐标转换: {x},{y} -> lat={lat}, lon={lon}")
logger.debug(f"CGCS2000坐标转换: {x},{y} -> lat={lat}, lon={lon}")
path_points.append((lat, lon))
logging.info(f"路径解析完成,坐标系={coordinate_system_type},共生成 {len(path_points)} 个坐标点")
logger.info(f"路径解析完成,坐标系={coordinate_system_type},共生成 {len(path_points)} 个坐标点")
# 暂时禁用过滤,保留所有路径点用于测试
logging.info(f"保留所有 {len(path_points)} 个路径点")
logger.info(f"保留所有 {len(path_points)} 个路径点")
return path_points
except Exception as e:
logging.error(f"路径解析失败: {str(e)}")
logger.error(f"路径解析失败: {str(e)}")
return []
def haversine_distance(lat1: float, lon1: float, lat2: float, lon2: float) -> float:
@ -1398,7 +1398,7 @@ class AircraftRouteFollower:
# 根据航班号获取对应的路由数据
flight_routes = aircraft_routes.get(self.flight_no)
if not flight_routes:
logging.warning(f"未找到航班 {self.flight_no} 的路由数据使用MU5123的路由作为默认")
logger.warning(f"未找到航班 {self.flight_no} 的路由数据使用MU5123的路由作为默认")
flight_routes = aircraft_routes.get("MU5123", {})
# 解析进港路径
@ -1406,20 +1406,20 @@ class AircraftRouteFollower:
# 验证MU5123进港路径的数据完整性然后合并为连续路径
if self.flight_no == "MU5123" and arrival_route:
logging.info(f"验证 {self.flight_no} 进港路径数据完整性")
logger.info(f"验证 {self.flight_no} 进港路径数据完整性")
arrival_route = validate_route_data_integrity(arrival_route, self.flight_no)
# 将31个路径段合并为连续路径让飞机能够完整运行
logging.info(f"{self.flight_no} 的分散路径段合并为连续路径")
logger.info(f"{self.flight_no} 的分散路径段合并为连续路径")
arrival_route = merge_discontinuous_route_for_flight(arrival_route, self.flight_no)
self.arrival_points = parse_route_path(arrival_route)
logging.info(f"航空器 {self.flight_no} 进港路径: {len(self.arrival_points)} 个点")
logger.info(f"航空器 {self.flight_no} 进港路径: {len(self.arrival_points)} 个点")
# 解析出港路径
departure_route = flight_routes.get("departure", {})
self.departure_points = parse_route_path(departure_route)
logging.info(f"航空器 {self.flight_no} 出港路径: {len(self.departure_points)} 个点")
logger.info(f"航空器 {self.flight_no} 出港路径: {len(self.departure_points)} 个点")
# 设置机位坐标138号机位的大概位置
if self.arrival_points:
@ -1431,7 +1431,7 @@ class AircraftRouteFollower:
self.gate_position = (36.354068, 120.083410)
except Exception as e:
logging.error(f"路径解析失败: {str(e)}")
logger.error(f"路径解析失败: {str(e)}")
self.arrival_points = []
self.departure_points = []
self.gate_position = (36.354068, 120.083410)
@ -1446,7 +1446,7 @@ class AircraftRouteFollower:
self.is_at_gate = False
self.flight_status = 'in_route' # 设置为路径运行状态
self.wait_until = 0.0 # 清除等待时间
logging.info(f"航空器 {self.flight_no} 开始进港路径跟随")
logger.info(f"航空器 {self.flight_no} 开始进港路径跟随")
elif route_type == "departure" and self.departure_points:
self.current_route_type = "departure"
@ -1456,10 +1456,10 @@ class AircraftRouteFollower:
self.is_at_gate = False
self.flight_status = 'in_route' # 设置为路径运行状态
self.wait_until = 0.0 # 清除等待时间
logging.info(f"航空器 {self.flight_no} 开始出港路径跟随")
logger.info(f"航空器 {self.flight_no} 开始出港路径跟随")
else:
logging.warning(f"航空器 {self.flight_no} 无效的路径类型: {route_type}")
logger.warning(f"航空器 {self.flight_no} 无效的路径类型: {route_type}")
def update_position_on_route(self, aircraft: dict[str, Any], speed_kmh: float, elapsed_time: float) -> bool:
"""
@ -1522,7 +1522,7 @@ class AircraftRouteFollower:
self.flight_status = 'at_gate' if self.is_at_gate else 'completed'
# 设置5秒等待时间
self.wait_until = current_time + self.waiting_duration
logging.info(f"航空器 {self.flight_no} 完成 {self.current_route_type} 路径,等待{self.waiting_duration}秒后重新开始")
logger.info(f"航空器 {self.flight_no} 完成 {self.current_route_type} 路径,等待{self.waiting_duration}秒后重新开始")
return True
# 更新到下一个目标点
@ -1622,12 +1622,12 @@ class AircraftRouteManager:
if follower.route_points:
aircraft["latitude"] = follower.route_points[0][0]
aircraft["longitude"] = follower.route_points[0][1]
logging.info(f"航空器 {aircraft.get('flightNo')} 等待结束,重新开始进港路径")
logger.info(f"航空器 {aircraft.get('flightNo')} 等待结束,重新开始进港路径")
route_completed = follower.update_position_on_route(aircraft, speed, elapsed_time)
if route_completed and follower.flight_status != 'waiting':
# 路径完成已设置5秒等待时间无需立即重新开始
logging.info(f"航空器 {aircraft.get('flightNo')} 进港完成,将等待{follower.waiting_duration}秒后重新开始")
logger.info(f"航空器 {aircraft.get('flightNo')} 进港完成,将等待{follower.waiting_duration}秒后重新开始")
def _update_departure_only_aircraft(self, aircraft: dict[str, Any], follower: AircraftRouteFollower,
speed: float, elapsed_time: float):
@ -1641,12 +1641,12 @@ class AircraftRouteManager:
if follower.route_points:
aircraft["latitude"] = follower.route_points[0][0]
aircraft["longitude"] = follower.route_points[0][1]
logging.info(f"航空器 {aircraft.get('flightNo')} 等待结束,重新开始出港路径")
logger.info(f"航空器 {aircraft.get('flightNo')} 等待结束,重新开始出港路径")
route_completed = follower.update_position_on_route(aircraft, speed, elapsed_time)
if route_completed and follower.flight_status != 'waiting':
# 路径完成已设置5秒等待时间无需立即重新开始
logging.info(f"航空器 {aircraft.get('flightNo')} 出港完成,将等待{follower.waiting_duration}秒后重新开始")
logger.info(f"航空器 {aircraft.get('flightNo')} 出港完成,将等待{follower.waiting_duration}秒后重新开始")
# 创建全局路径跟随管理器
@ -2025,7 +2025,6 @@ class BackgroundUpdateManager:
self.update_thread = threading.Thread(target=self._update_loop, daemon=True)
self.update_thread.start()
logger.info("后台更新管理器已启动")
logger.handlers[0].flush() # 立即刷新日志
def stop(self):
"""停止后台更新线程"""
@ -2052,19 +2051,11 @@ class BackgroundUpdateManager:
update_vehicle_position(vehicle, UPDATE_INTERVAL)
vehicle["time"] = int(current_time * 1000)
# 定期刷新日志到文件每10个周期
if int(current_time) % 10 == 0:
for handler in logger.handlers:
handler.flush()
# 休眠到下一个更新周期
time.sleep(UPDATE_INTERVAL)
except Exception as e:
logger.error(f"后台更新出错: {str(e)}")
# 错误发生时立即刷新日志
for handler in logger.handlers:
handler.flush()
time.sleep(1.0) # 出错时短暂休眠后继续
# 全局后台更新管理器实例