ROS2 C++ 日志宏函数使用说明

基本日志宏 - RCLCPP_{DEBUG,INFO,WARN,ERROR,FATAL}

每次都会输出。
用途:用于常规日志输出,例如在每一帧、每个回调、每次服务调用中打印。
示例:
RCLCPP_INFO(logger, "Received %d items", count);

只打印一次 - RCLCPP_{...}_ONCE

只打印第一次命中这行代码时的日志。
用途:避免在循环中重复打印相同的警告或信息,打印一次性提示如“连接成功”。
示例:
RCLCPP_WARN_ONCE(logger, "First time sensor value is too high!");

按条件输出日志 - RCLCPP_{...}_EXPRESSION

表达式为真时打印。
用途:在某些状态满足时才输出日志。
示例:
RCLCPP_DEBUG_EXPRESSION(logger, battery_level < 10, "Battery is critically low!");

按函数判断是否输出 - RCLCPP_{...}_FUNCTION

函数返回 true 时打印。
用途:复杂条件封装在函数中,增强逻辑可读性。
示例:
bool should_log() { return cpu_usage > 90; }
RCLCPP_ERROR_FUNCTION(logger, should_log, "High CPU usage detected!");

跳过第一次再打印 - RCLCPP_{...}_SKIPFIRST

第一次不打印,之后每次都打印。
用途:跳过初始化阶段的日志或噪音。
示例:
RCLCPP_WARN_SKIPFIRST(logger, "Temperature slightly high.");

限频打印 - RCLCPP_{...}_THROTTLE

指定毫秒内最多打印一次。
用途:控制高频率输出,防止刷屏。
示例:
RCLCPP_INFO_THROTTLE(logger, 1000, "Status: %s", status.c_str());

跳过第一次 + 限频 - RCLCPP_{...}_SKIPFIRST_THROTTLE

第一次跳过,后续限频打印。
用途:避免初始化打印,运行时限频。
示例:
RCLCPP_DEBUG_SKIPFIRST_THROTTLE(logger, 2000, "Reading sensor data...");

流式日志宏 - RCLCPP_{...}_STREAM

使用 << 风格,不用 printf 格式字符串,类型安全。
示例:
RCLCPP_INFO_STREAM(logger, "Current speed: " << speed << " km/h");
同样适用于 ONCE、THROTTLE、EXPRESSION 等变体。

对比总结表

宏类别使用时机 / 控制逻辑示例
RCLCPP_INFO正常打印,每次触发都输出
RCLCPP_WARN_ONCE只打印第一次(常用于“首次异常”)
RCLCPP_ERROR_THROTTLE高频情况下防刷屏(如 1 秒 1 次)
RCLCPP_INFO_EXPRESSION仅当某条件为真时输出
RCLCPP_FATAL_SKIPFIRST跳过第一次初始化阶段的误报
RCLCPP_DEBUG_FUNCTION仅当自定义函数返回 true 时打印
RCLCPP_WARN_SKIPFIRST_THROTTLE稳定后才开始限频打印(不影响系统性能)
RCLCPP_INFO_STREAM流式语法,类型安全,适合多变量组合输出
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

daolongzhang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值