1.日志级别
日志消息分为五个不同的严重级别宏,与Android的Log定义的严重级别类似,如下基础宏:
1ROS_DEBUG_STREAM、ROS_INFO_STREAM、ROS_WARN_STREAM、ROS_ERROR_STREAM、ROS_FATAL_STREAM(按照严重程序级别排序,低到高) 2 3C++代码: 4 5 #include <ros/ros.h> 6 7 int main(int argc, char** argv){ 8 9 ros::init(argc, argv, "hello_ros"); 10 11 ros::NodeHandle nh; 12 13 ROS_DEBUG_STREAM("Log DEBUG"); 14 15 ROS_INFO_STREAM("Log INFO"); 16 17 ROS_WARN_STREAM("Log WARN"); 18 19 ROS_ERROR_STREAM("Log ERROR"); 20 21 ROS_FATAL_STREAM("Log FATAL"); 22 23 }
从运行结果来看,你会发现DEBUG没有打印出来,Why?淡定,4会解答
2.循环单次日志
基础宏后面添加_ONCE,代表日志在循环迭代中只有第一次才会打印日志:
1C++代码: 2 3 #include <ros/ros.h> 4 5 int main(int argc, char** argv){ 6 7 ros::init(argc, argv, "hello_ros"); 8 9 ros::NodeHandle nh; 10 11 for(int i = 0; i < 10; i++){ 12 13 ROS_INFO_STREAM_ONCE("Log info i = " << i); 14 15 if(i >= 2){ 16 17 ROS_INFO_STREAM_ONCE("Log info i = " << i); 18 19 } 20 21 } 22 23 }
**3.频率日志
**
基础宏后面添加_THROTTLE就变为了频率日志,入ROS_INFO_STREAM_THROTTLE(interval, message),第一个参数interval代表以秒为单位的时间量,时间量指的是两个日志出现的最小时间间隔
4.打开、关闭日志
1中提到DEBUG日志信息没有输出,原因是C++程序默认的日志级别为INFO,所有DEBUG日志被忽略掉了,那问题来了,如何打开DEBUG级别日志呢?
1rosservice call /node-name/set_logger_level ros.package-name level 2C++代码: 3#include <ros/ros.h> 4int main(int argc, char** argv){ 5 ros::init(argc, argv, "hello_ros"); 6 ros::NodeHandle nh; 7 while(ros::ok()){ 8 ROS_DEBUG_STREAM("Log DEBUG"); 9 ROS_INFO_STREAM("Log INFO"); 10 ROS_WARN_STREAM("Log WARN"); 11 ROS_ERROR_STREAM("Log ERROR"); 12 ROS_FATAL_STREAM("Log FATAL"); 13 } 14} 15 16 17启动上面节点,然后终端运行rosservice call /hello_ros/set_logger_level ros.hello DEBUG