1.概述
目前支持的日誌記錄功能是:
- 客戶端庫(
rclcpp
和rclpy
)使用通用日誌記錄庫來提供:- 使用各種過濾器記錄呼叫。
- 日誌記錄器的層次結構。
- 與自動使用節點名稱和命名空間的節點關聯的日誌記錄器。
- 控制檯輸出
- 文件輸出和功能,類似於遠程消費消息的rosout即將發佈。
- 記錄器級別的編程配置
- 支持默認記錄器級別的啓動時刻配置; 運行時刻的配置文件和外部配置即將發佈。
2.日誌記錄器概念
日誌消息與他們相關聯的嚴重性級別:DEBUG
,INFO
,WARN
,ERROR
或者FATAL
,按升序排列。
記錄器僅處理嚴重性等於或高於爲其選擇的指定級別的日誌消息。
每個節點(在rclcpp
和rclpy中
)都有一個與之關聯的記錄器,它自動包含節點的名稱和命名空間。如果節點的名稱從外部重新映射到源代碼中定義的名稱以外的其他名稱,則它將反映在記錄器名稱中。還可以創建使用特定名稱的非節點記錄器。
記錄器名稱表示層次結構。如果未設置名爲“abc.def”的記錄器的級別,它將推遲到其名爲“abc”的父級別,如果該級別也未設置,則將使用默認記錄器級別。當記錄器“abc”的級別改變時,將對其所有派生文件(例如“abc.def”,“abc.ghi.jkl”)的級別產生影響,除非已明確設置了派生文件的級別。
3.日誌用法
在C ++中:
在Python中:
4.記錄器配置
4.1默認嚴重性級別的命令行配置
從Bouncy ROS 2版本開始,可以通過下面的命令行配置日誌記錄器的默認嚴重性級別,例如(級別字符串不區分大小寫):
ros2 run demo_nodes_cpp listener __log_level:=debug
這將影響未明確配置指定的嚴重性級別的所有記錄器。即將發佈從命令行配置特定記錄器。
4.2個別日誌記錄器的可編程配置
記錄器配置仍在開發中。目前,可以通過編程方式配置個別記錄器的嚴重性級別,例如:
在C ++中:
rcutils_logging_set_logger_level("logger_name", RCUTILS_LOG_SEVERITY_DEBUG);
在Python中:
logger.set_level(rclpy.logging.LoggingSeverity.DEBUG)
rclpy.logging.set_logger_level('logger_name', rclpy.logging.LoggingSeverity.DEBUG)
日誌演示提供手動公開服務示例,使得記錄器可從外部配置; 在未來,我們希望記錄器運行時刻的配置功能能夠自動公開。
5.控制檯輸出配置
默認情況下,控制檯輸出將被格式化爲包括消息嚴重性,記錄器名稱和消息。還可以使用日誌調用的文件名,函數名和行號等信息。可以使用RCUTILS_CONSOLE_OUTPUT_FORMAT
環境變量配置自定義控制檯輸出格式:詳細信息,請參閱rcutils文檔。由於rclpy
和rclcpp
都使用rcutils來
記錄日誌,這將影響所有的Python和C ++節點。
英文原文:https://index.ros.org/doc/ros2/Concepts/Logging/#id1