ROS - 日志

ROS 日志消息(C++)

1.日志级别

日志消息分为五个不同的严重级别宏,与Android的Log定义的严重级别类似,如下基础宏:

ROS_DEBUG_STREAM、ROS_INFO_STREAM、ROS_WARN_STREAM、ROS_ERROR_STREAM、ROS_FATAL_STREAM(按照严重程序级别排序,低到高)

C++代码:

#include <ros/ros.h>

int main(int argc, char** argv){

    ros::init(argc, argv, "hello_ros");

    ros::NodeHandle nh;

    ROS_DEBUG_STREAM("Log DEBUG");

    ROS_INFO_STREAM("Log INFO");

    ROS_WARN_STREAM("Log WARN");

    ROS_ERROR_STREAM("Log ERROR");

    ROS_FATAL_STREAM("Log FATAL");

}

编译运行:

pim_server@pim-Precision-T1700:~/ROS/Project$ rosrun hello hello_node

[ INFO] [1476881348.684803138]: Log INFO

[ WARN] [1476881348.684843112]: Log WARN

[ERROR] [1476881348.684852220]: Log ERROR

[FATAL] [1476881348.684876076]: Log FATAL

从运行结果来看,你会发现DEBUG没有打印出来,Why?淡定,4会解答


2.循环单次日志

基础宏后面添加_ONCE,代表日志在循环迭代中只有第一次才会打印日志:

C++代码:

#include <ros/ros.h>

int main(int argc, char** argv){

    ros::init(argc, argv, "hello_ros");

    ros::NodeHandle nh;

    for(int i = 0; i < 10; i++){

        ROS_INFO_STREAM_ONCE("Log info  i = " << i);

        if(i >= 2){

            ROS_INFO_STREAM_ONCE("Log info  i = " << i);

        }

    }

}

终端运行:



3.频率日志

基础宏后面添加_THROTTLE就变为了频率日志,入ROS_INFO_STREAM_THROTTLE(interval, message),第一个参数interval代表以秒为单位的时间量,时间量指的是两个日志出现的最小时间间隔



4.打开、关闭日志

1中提到DEBUG日志信息没有输出,原因是C++程序默认的日志级别为INFO,所有DEBUG日志被忽略掉了,那问题来了,如何打开DEBUG级别日志呢?

rosservice call /node-name/set_logger_level ros.package-name level

C++代码:

#include <ros/ros.h>

int main(int argc, char** argv){

    ros::init(argc, argv, "hello_ros");

    ros::NodeHandle nh;

    while(ros::ok()){

        ROS_DEBUG_STREAM("Log DEBUG");

        ROS_INFO_STREAM("Log INFO");

        ROS_WARN_STREAM("Log WARN");

        ROS_ERROR_STREAM("Log ERROR");

        ROS_FATAL_STREAM("Log FATAL");

    }

}


启动上面节点,然后终端运行

rosservice call /hello_ros/set_logger_level ros.hello DEBUG



终端打印如下,久违的DEBUG!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,032评论 19 139
  • 在应用程序中添加日志记录总的来说基于三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析...
    时待吾阅读 5,097评论 1 13
  • 在应用程序中添加日志记录总的来说基于三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析...
    时待吾阅读 5,038评论 0 6
  • 网易视频云分享:最佳日志实践 - vcould163的博客 - 博客频道 - CSDN.NEThttp://blo...
    葡萄喃喃呓语阅读 568评论 0 9
  • 2016.10.17为什么你总是半途而废? 坚持和努力其实并不是正确的概念,如果一件事你觉得一开始就要坚持或者努力...
    晓灿辰依阅读 283评论 0 1