From 154048107d061e185ddcf3a4b6d69241d06b82b7 Mon Sep 17 00:00:00 2001 From: Xuwznln <18435084+Xuwznln@users.noreply.github.com> Date: Thu, 4 Dec 2025 16:04:56 +0800 Subject: [PATCH] print all logs to file fix resource dict dump error --- unilabos/app/communication.py | 2 +- unilabos/app/ws_client.py | 6 +++--- unilabos/resources/graphio.py | 2 +- unilabos/ros/nodes/presets/host_node.py | 8 +++++--- unilabos/ros/nodes/resource_tracker.py | 2 +- unilabos/utils/log.py | 11 ++++------- 6 files changed, 15 insertions(+), 16 deletions(-) diff --git a/unilabos/app/communication.py b/unilabos/app/communication.py index 436fa98a..700065dc 100644 --- a/unilabos/app/communication.py +++ b/unilabos/app/communication.py @@ -141,7 +141,7 @@ class CommunicationClientFactory: """ if cls._client_cache is None: cls._client_cache = cls.create_client(protocol) - logger.info(f"[CommunicationFactory] Created {type(cls._client_cache).__name__} client") + logger.trace(f"[CommunicationFactory] Created {type(cls._client_cache).__name__} client") return cls._client_cache diff --git a/unilabos/app/ws_client.py b/unilabos/app/ws_client.py index 471868bc..50204a2e 100644 --- a/unilabos/app/ws_client.py +++ b/unilabos/app/ws_client.py @@ -389,7 +389,7 @@ class MessageProcessor: self.is_running = True self.thread = threading.Thread(target=self._run, daemon=True, name="MessageProcessor") self.thread.start() - logger.info("[MessageProcessor] Started") + logger.trace("[MessageProcessor] Started") def stop(self) -> None: """停止消息处理线程""" @@ -939,7 +939,7 @@ class QueueProcessor: # 事件通知机制 self.queue_update_event = threading.Event() - logger.info("[QueueProcessor] Initialized") + logger.trace("[QueueProcessor] Initialized") def set_websocket_client(self, websocket_client: "WebSocketClient"): """设置WebSocket客户端引用""" @@ -954,7 +954,7 @@ class QueueProcessor: self.is_running = True self.thread = threading.Thread(target=self._run, daemon=True, name="QueueProcessor") self.thread.start() - logger.info("[QueueProcessor] Started") + logger.trace("[QueueProcessor] Started") def stop(self) -> None: """停止队列处理线程""" diff --git a/unilabos/resources/graphio.py b/unilabos/resources/graphio.py index 4915668f..d81e5c34 100644 --- a/unilabos/resources/graphio.py +++ b/unilabos/resources/graphio.py @@ -97,7 +97,7 @@ def canonicalize_nodes_data( for node in nodes: try: - print_status(f"DeviceId: {node['id']}, Class: {node['class']}", "info") + # print_status(f"DeviceId: {node['id']}, Class: {node['class']}", "info") # 使用标准化方法 resource_instance = ResourceDictInstance.get_resource_instance_from_dict(node) known_nodes[node["id"]] = resource_instance diff --git a/unilabos/ros/nodes/presets/host_node.py b/unilabos/ros/nodes/presets/host_node.py index 1746bb11..fa9cad12 100644 --- a/unilabos/ros/nodes/presets/host_node.py +++ b/unilabos/ros/nodes/presets/host_node.py @@ -718,7 +718,7 @@ class HostNode(BaseROS2DeviceNode): feedback_callback=lambda feedback_msg: self.feedback_callback(item, action_id, feedback_msg), goal_uuid=goal_uuid_obj, ) - future.add_done_callback(lambda future: self.goal_response_callback(item, action_id, future)) + future.add_done_callback(lambda f: self.goal_response_callback(item, action_id, f)) def goal_response_callback(self, item: "QueueItem", action_id: str, future) -> None: """目标响应回调""" @@ -729,9 +729,11 @@ class HostNode(BaseROS2DeviceNode): self.lab_logger().info(f"[Host Node] Goal {action_id} ({item.job_id}) accepted") self._goals[item.job_id] = goal_handle - goal_handle.get_result_async().add_done_callback( - lambda future: self.get_result_callback(item, action_id, future) + goal_future = goal_handle.get_result_async() + goal_future.add_done_callback( + lambda f: self.get_result_callback(item, action_id, f) ) + goal_future.result() def feedback_callback(self, item: "QueueItem", action_id: str, feedback_msg) -> None: """反馈回调""" diff --git a/unilabos/ros/nodes/resource_tracker.py b/unilabos/ros/nodes/resource_tracker.py index c9dc57f9..0eed1172 100644 --- a/unilabos/ros/nodes/resource_tracker.py +++ b/unilabos/ros/nodes/resource_tracker.py @@ -155,7 +155,7 @@ class ResourceDictInstance(object): res_dict = self.res_content.model_dump(by_alias=True) res_dict["children"] = {child.res_content.id: child.get_plr_nested_dict() for child in self.children} res_dict["parent"] = self.res_content.parent_instance_name - res_dict["position"] = self.res_content.position.position.model_dump() + res_dict["position"] = self.res_content.pose.position.model_dump() del res_dict["pose"] return res_dict diff --git a/unilabos/utils/log.py b/unilabos/utils/log.py index af03d946..ffe13c02 100644 --- a/unilabos/utils/log.py +++ b/unilabos/utils/log.py @@ -162,8 +162,9 @@ def configure_logger(loglevel=None, working_dir=None): """ # 获取根日志记录器 root_logger = logging.getLogger() - + root_logger.setLevel(TRACE_LEVEL) # 设置日志级别 + numeric_level = logging.DEBUG if loglevel is not None: if isinstance(loglevel, str): # 将字符串转换为logging级别 @@ -173,12 +174,8 @@ def configure_logger(loglevel=None, working_dir=None): numeric_level = getattr(logging, loglevel.upper(), None) if not isinstance(numeric_level, int): print(f"警告: 无效的日志级别 '{loglevel}',使用默认级别 DEBUG") - numeric_level = logging.DEBUG else: numeric_level = loglevel - root_logger.setLevel(numeric_level) - else: - root_logger.setLevel(logging.DEBUG) # 默认级别 # 移除已存在的处理器 for handler in root_logger.handlers[:]: @@ -186,7 +183,7 @@ def configure_logger(loglevel=None, working_dir=None): # 创建控制台处理器 console_handler = logging.StreamHandler() - console_handler.setLevel(root_logger.level) # 使用与根记录器相同的级别 + console_handler.setLevel(numeric_level) # 使用与根记录器相同的级别 # 使用自定义的颜色格式化器 color_formatter = ColoredFormatter() @@ -206,7 +203,7 @@ def configure_logger(loglevel=None, working_dir=None): # 创建文件处理器 file_handler = logging.FileHandler(log_filepath, encoding="utf-8") - file_handler.setLevel(root_logger.level) + file_handler.setLevel(TRACE_LEVEL) # 使用不带颜色的格式化器 file_formatter = ColoredFormatter(use_colors=False)