mirror of
https://github.com/dptech-corp/Uni-Lab-OS.git
synced 2026-02-07 15:35:10 +00:00
print all logs to file
fix resource dict dump error
This commit is contained in:
@@ -141,7 +141,7 @@ class CommunicationClientFactory:
|
|||||||
"""
|
"""
|
||||||
if cls._client_cache is None:
|
if cls._client_cache is None:
|
||||||
cls._client_cache = cls.create_client(protocol)
|
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
|
return cls._client_cache
|
||||||
|
|
||||||
|
|||||||
@@ -389,7 +389,7 @@ class MessageProcessor:
|
|||||||
self.is_running = True
|
self.is_running = True
|
||||||
self.thread = threading.Thread(target=self._run, daemon=True, name="MessageProcessor")
|
self.thread = threading.Thread(target=self._run, daemon=True, name="MessageProcessor")
|
||||||
self.thread.start()
|
self.thread.start()
|
||||||
logger.info("[MessageProcessor] Started")
|
logger.trace("[MessageProcessor] Started")
|
||||||
|
|
||||||
def stop(self) -> None:
|
def stop(self) -> None:
|
||||||
"""停止消息处理线程"""
|
"""停止消息处理线程"""
|
||||||
@@ -939,7 +939,7 @@ class QueueProcessor:
|
|||||||
# 事件通知机制
|
# 事件通知机制
|
||||||
self.queue_update_event = threading.Event()
|
self.queue_update_event = threading.Event()
|
||||||
|
|
||||||
logger.info("[QueueProcessor] Initialized")
|
logger.trace("[QueueProcessor] Initialized")
|
||||||
|
|
||||||
def set_websocket_client(self, websocket_client: "WebSocketClient"):
|
def set_websocket_client(self, websocket_client: "WebSocketClient"):
|
||||||
"""设置WebSocket客户端引用"""
|
"""设置WebSocket客户端引用"""
|
||||||
@@ -954,7 +954,7 @@ class QueueProcessor:
|
|||||||
self.is_running = True
|
self.is_running = True
|
||||||
self.thread = threading.Thread(target=self._run, daemon=True, name="QueueProcessor")
|
self.thread = threading.Thread(target=self._run, daemon=True, name="QueueProcessor")
|
||||||
self.thread.start()
|
self.thread.start()
|
||||||
logger.info("[QueueProcessor] Started")
|
logger.trace("[QueueProcessor] Started")
|
||||||
|
|
||||||
def stop(self) -> None:
|
def stop(self) -> None:
|
||||||
"""停止队列处理线程"""
|
"""停止队列处理线程"""
|
||||||
|
|||||||
@@ -97,7 +97,7 @@ def canonicalize_nodes_data(
|
|||||||
|
|
||||||
for node in nodes:
|
for node in nodes:
|
||||||
try:
|
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)
|
resource_instance = ResourceDictInstance.get_resource_instance_from_dict(node)
|
||||||
known_nodes[node["id"]] = resource_instance
|
known_nodes[node["id"]] = resource_instance
|
||||||
|
|||||||
@@ -718,7 +718,7 @@ class HostNode(BaseROS2DeviceNode):
|
|||||||
feedback_callback=lambda feedback_msg: self.feedback_callback(item, action_id, feedback_msg),
|
feedback_callback=lambda feedback_msg: self.feedback_callback(item, action_id, feedback_msg),
|
||||||
goal_uuid=goal_uuid_obj,
|
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:
|
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.lab_logger().info(f"[Host Node] Goal {action_id} ({item.job_id}) accepted")
|
||||||
self._goals[item.job_id] = goal_handle
|
self._goals[item.job_id] = goal_handle
|
||||||
goal_handle.get_result_async().add_done_callback(
|
goal_future = goal_handle.get_result_async()
|
||||||
lambda future: self.get_result_callback(item, action_id, future)
|
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:
|
def feedback_callback(self, item: "QueueItem", action_id: str, feedback_msg) -> None:
|
||||||
"""反馈回调"""
|
"""反馈回调"""
|
||||||
|
|||||||
@@ -155,7 +155,7 @@ class ResourceDictInstance(object):
|
|||||||
res_dict = self.res_content.model_dump(by_alias=True)
|
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["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["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"]
|
del res_dict["pose"]
|
||||||
return res_dict
|
return res_dict
|
||||||
|
|
||||||
|
|||||||
@@ -162,8 +162,9 @@ def configure_logger(loglevel=None, working_dir=None):
|
|||||||
"""
|
"""
|
||||||
# 获取根日志记录器
|
# 获取根日志记录器
|
||||||
root_logger = logging.getLogger()
|
root_logger = logging.getLogger()
|
||||||
|
root_logger.setLevel(TRACE_LEVEL)
|
||||||
# 设置日志级别
|
# 设置日志级别
|
||||||
|
numeric_level = logging.DEBUG
|
||||||
if loglevel is not None:
|
if loglevel is not None:
|
||||||
if isinstance(loglevel, str):
|
if isinstance(loglevel, str):
|
||||||
# 将字符串转换为logging级别
|
# 将字符串转换为logging级别
|
||||||
@@ -173,12 +174,8 @@ def configure_logger(loglevel=None, working_dir=None):
|
|||||||
numeric_level = getattr(logging, loglevel.upper(), None)
|
numeric_level = getattr(logging, loglevel.upper(), None)
|
||||||
if not isinstance(numeric_level, int):
|
if not isinstance(numeric_level, int):
|
||||||
print(f"警告: 无效的日志级别 '{loglevel}',使用默认级别 DEBUG")
|
print(f"警告: 无效的日志级别 '{loglevel}',使用默认级别 DEBUG")
|
||||||
numeric_level = logging.DEBUG
|
|
||||||
else:
|
else:
|
||||||
numeric_level = loglevel
|
numeric_level = loglevel
|
||||||
root_logger.setLevel(numeric_level)
|
|
||||||
else:
|
|
||||||
root_logger.setLevel(logging.DEBUG) # 默认级别
|
|
||||||
|
|
||||||
# 移除已存在的处理器
|
# 移除已存在的处理器
|
||||||
for handler in root_logger.handlers[:]:
|
for handler in root_logger.handlers[:]:
|
||||||
@@ -186,7 +183,7 @@ def configure_logger(loglevel=None, working_dir=None):
|
|||||||
|
|
||||||
# 创建控制台处理器
|
# 创建控制台处理器
|
||||||
console_handler = logging.StreamHandler()
|
console_handler = logging.StreamHandler()
|
||||||
console_handler.setLevel(root_logger.level) # 使用与根记录器相同的级别
|
console_handler.setLevel(numeric_level) # 使用与根记录器相同的级别
|
||||||
|
|
||||||
# 使用自定义的颜色格式化器
|
# 使用自定义的颜色格式化器
|
||||||
color_formatter = ColoredFormatter()
|
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 = logging.FileHandler(log_filepath, encoding="utf-8")
|
||||||
file_handler.setLevel(root_logger.level)
|
file_handler.setLevel(TRACE_LEVEL)
|
||||||
|
|
||||||
# 使用不带颜色的格式化器
|
# 使用不带颜色的格式化器
|
||||||
file_formatter = ColoredFormatter(use_colors=False)
|
file_formatter = ColoredFormatter(use_colors=False)
|
||||||
|
|||||||
Reference in New Issue
Block a user