在ROS中设置日志输出的方法。
ROS日志输出
-
需要包含头文件:
#include <ros/console.h> -
ROS定义了
ROS_*形式的宏,用于表示不同类型的日志输出:ROS_<verbosity level>[_STREAM][_<other>] -
日志输出可以在终端中或者
rqt_console中查看;
日志详细级别
| verbosity level | 含义 |
|---|---|
DEBUG |
Information that you never need to see if the system is working properly. |
INFO |
Small amounts of information that may be useful to a user. |
WARN |
Information that the user may find alarming, and may affect the output of the application, but is part of the expected working of the system. |
ERROR |
Something serious (but recoverable) has gone wrong. |
FATAL |
Something unrecoverable has happened. |
- 表格中从上到下的详细级别(verbosity level)依次提高,其严重程度也依次提高;
- ROS默认输出
INFO及以上详细级别的日志; -
可以通过以下五种方式设置日志输出的最低详细级别:
-
修改
${ROS_ROOT}/config/rosconsole.config文件:log4j.logger.ros=INFO log4j.logger.ros.roscpp.superdebug=WARN -
使用
rqt_logger_level的图形化交互界面设置:rosrun rqt_logger_level rqt_logger_level -
使用
rqt_console的图形化交互界面设置:rqt_console -
使用
rosconsole命令行工具设置:rosconsole get <node> <logger> rosconsole set <node> <logger> <level> -
使用
rosconsole功能包的API:// 设置日志输出的最低详细级别为WARN,详细级别>=WARN的日志会被输出 if (ros::console::set_logger_level(ROSCONSOLE_DEFAULT_NAME, ros::console::levels::Warn)) { ros::console::notifyLoggerLevelsChanged(); }
-
日志输出语法
-
在使用
ROS_<verbosity level>输出日志时,需要使用类似C中printf()的语法:ROS_INFO("Hello %s", "World"); -
在使用
ROS_<verbosity level>_STREAM输出日志时,需要使用类似C++中std::iostream的语法:ROS_INFO_STREAM("Hello " << "World");