rosconsole provides four different types of logging statements, at 5 different verbosity levels, with both printf- and stream-style formatting.
Base
ROS_DEBUG(...)
ROS_DEBUG_STREAM(args)
The base versions simply print an output message, ie:
1 #include <ros/console.h>
2 ROS_DEBUG("Hello %s", "World");
3 ROS_DEBUG_STREAM("Hello " << "World");
The base versions output to a logger named "ros.<your_package_name>".
Named
ROS_DEBUG_NAMED(name, ...)
ROS_DEBUG_STREAM_NAMED(name, args)
The named versions output to a logger that is a child of the default one. This allows you to configure different logging statements to be enabled/disabled based on their name. For example:
1 #include <ros/console.h>
2 ROS_DEBUG_NAMED("test_only", "Hello %s", "World");
3 ROS_DEBUG_STREAM_NAMED("test_only", "Hello " << "World");
This will output to a logger named "ros.<your_package_name>.test_only". More information about this is available in the configuration file section.
Conditional
ROS_DEBUG_COND(cond, ...)
ROS_DEBUG_STREAM_COND(cond, args)
The conditional versions will only output if the condition provided is true. The condition itself will only be evaluated if the logging statement itself is enabled.
1 #include <ros/console.h>
2 ROS_DEBUG_COND(x < 0, "Uh oh, x = %d, this is bad", x);
3 ROS_DEBUG_STREAM_COND(x < 0, "Uh oh, x = " << x << ", this is bad");
Conditional Named
ROS_DEBUG_COND_NAMED(cond, name, ...)
ROS_DEBUG_STREAM_COND_NAMED(cond, name, args)
The named conditional versions are just combinations of the above:
1 #include <ros/console.h>
2 ROS_DEBUG_COND_NAMED(x < 0, "test_only", "Uh oh, x = %d, this is bad", x);
3 ROS_DEBUG_STREAM_COND_NAMED(x < 0, "test_only", "Uh oh, x = " << x << ", this is bad");
Once [1.1+]
ROS_DEBUG_ONCE(...)
ROS_DEBUG_STREAM_ONCE(args)
ROS_DEBUG_ONCE_NAMED(name, ...)
ROS_DEBUG_STREAM_ONCE_NAMED(name, args)
These macros will only every print out a warning the first time the macro is hit and enabled.
1 #include <ros/console.h>
2 for (int i = 0; i < 10; ++i)
3 {
4 ROS_DEBUG_ONCE("This message will only print once");
5 }
Throttle [1.1+]
ROS_DEBUG_THROTTLE(period, ...)
ROS_DEBUG_STREAM_THROTTLE(period, args)
ROS_DEBUG_THROTTLE_NAMED(period, name, ...)
ROS_DEBUG_STREAM_THROTTLE_NAMED(period, name, args)
Throttled output will print a message at most once per "period".
1 while (true)
2 {
3 ROS_DEBUG_THROTTLE(60, "This message will print every 60 seconds");
4 }
Filter [1.1+]
ROS_DEBUG_FILTER(filter, ...)
ROS_DEBUG_STREAM_FILTER(filter, args)
ROS_DEBUG_FILTER_NAMED(filter, name, ...)
ROS_DEBUG_STREAM_FILTER_NAMED(filter, name, args)
Filtered output allows you to specify a user-defined filter that extends the ros::console::FilterBase class. Your filter must be a pointer type.
The five different verbosity levels are, in order:
- DEBUG
- INFO
- WARN
- ERROR
- FATAL