#include "console_backend.h"
#include <cstdio>
#include <sstream>
#include <ros/time.h>
#include <cstdarg>
#include <ros/macros.h>
#include <map>
#include <vector>
#include "rosconsole/macros_generated.h"
Go to the source code of this file.
Classes | |
class | ros::console::FilterBase |
Base-class for filters. Filters allow full user-defined control over whether or not a message should print. The ROS_X_FILTER... macros provide the filtering functionality. More... | |
struct | ros::console::FilterParams |
Parameter structure passed to FilterBase::isEnabled(...);. Includes both input and output parameters. More... | |
struct | ros::console::Formatter |
class | ros::console::LogAppender |
struct | ros::console::LogLocation |
Internal. More... | |
struct | ros::console::Token |
Namespaces | |
namespace | boost |
namespace | ros |
namespace | ros::console |
Defines | |
#define | __ROSCONSOLE_FUNCTION__ "" |
#define | ROS_LIKELY(x) __builtin_expect((x),1) |
#define | ROS_LOG(level, name,...) ROS_LOG_COND(true, level, name, __VA_ARGS__) |
Log to a given named logger at a given verbosity level, with printf-style formatting. | |
#define | ROS_LOG_COND(cond, level, name,...) |
Log to a given named logger at a given verbosity level, only if a given condition has been met, with printf-style formatting. | |
#define | ROS_LOG_DELAYED_THROTTLE(rate, level, name,...) |
Log to a given named logger at a given verbosity level, limited to a specific rate of printing, with printf-style formatting. | |
#define | ROS_LOG_FILTER(filter, level, name,...) |
Log to a given named logger at a given verbosity level, with user-defined filtering, with printf-style formatting. | |
#define | ROS_LOG_ONCE(level, name,...) |
Log to a given named logger at a given verbosity level, only the first time it is hit when enabled, with printf-style formatting. | |
#define | ROS_LOG_STREAM(level, name, args) ROS_LOG_STREAM_COND(true, level, name, args) |
Log to a given named logger at a given verbosity level, with stream-style formatting. | |
#define | ROS_LOG_STREAM_COND(cond, level, name, args) |
Log to a given named logger at a given verbosity level, only if a given condition has been met, with stream-style formatting. | |
#define | ROS_LOG_STREAM_DELAYED_THROTTLE(rate, level, name, args) |
Log to a given named logger at a given verbosity level, limited to a specific rate of printing and postponed first message. | |
#define | ROS_LOG_STREAM_FILTER(filter, level, name, args) |
Log to a given named logger at a given verbosity level, with user-defined filtering, with stream-style formatting. | |
#define | ROS_LOG_STREAM_ONCE(level, name, args) |
Log to a given named logger at a given verbosity level, only the first time it is hit when enabled, with printf-style formatting. | |
#define | ROS_LOG_STREAM_THROTTLE(rate, level, name, args) |
Log to a given named logger at a given verbosity level, limited to a specific rate of printing, with printf-style formatting. | |
#define | ROS_LOG_THROTTLE(rate, level, name,...) |
Log to a given named logger at a given verbosity level, limited to a specific rate of printing, with printf-style formatting. | |
#define | ROS_UNLIKELY(x) __builtin_expect((x),0) |
#define | ROSCONSOLE_AUTOINIT |
Initializes the rosconsole library. Usually unnecessary to call directly. | |
#define | ROSCONSOLE_DECL |
#define | ROSCONSOLE_DEFAULT_NAME ROSCONSOLE_NAME_PREFIX |
#define | ROSCONSOLE_DEFINE_LOCATION(cond, level, name) |
#define | ROSCONSOLE_MIN_SEVERITY ROSCONSOLE_SEVERITY_DEBUG |
#define | ROSCONSOLE_NAME_PREFIX ROSCONSOLE_ROOT_LOGGER_NAME "." ROSCONSOLE_PACKAGE_NAME |
#define | ROSCONSOLE_PACKAGE_NAME "unknown_package" |
#define | ROSCONSOLE_PRINT_AT_LOCATION(...) ROSCONSOLE_PRINT_AT_LOCATION_WITH_FILTER(0, __VA_ARGS__) |
#define | ROSCONSOLE_PRINT_AT_LOCATION_WITH_FILTER(filter,...) ::ros::console::print(filter, __rosconsole_define_location__loc.logger_, __rosconsole_define_location__loc.level_, __FILE__, __LINE__, __ROSCONSOLE_FUNCTION__, __VA_ARGS__) |
#define | ROSCONSOLE_PRINT_STREAM_AT_LOCATION(args) ROSCONSOLE_PRINT_STREAM_AT_LOCATION_WITH_FILTER(0, args) |
#define | ROSCONSOLE_PRINT_STREAM_AT_LOCATION_WITH_FILTER(filter, args) |
#define | ROSCONSOLE_PRINTF_ATTRIBUTE(a, b) |
#define | ROSCONSOLE_ROOT_LOGGER_NAME "ros" |
#define | ROSCONSOLE_SEVERITY_DEBUG 0 |
#define | ROSCONSOLE_SEVERITY_ERROR 3 |
#define | ROSCONSOLE_SEVERITY_FATAL 4 |
#define | ROSCONSOLE_SEVERITY_INFO 1 |
#define | ROSCONSOLE_SEVERITY_NONE 5 |
#define | ROSCONSOLE_SEVERITY_WARN 2 |
Typedefs | |
typedef boost::shared_ptr< Token > | ros::console::TokenPtr |
typedef std::vector< TokenPtr > | ros::console::V_Token |
Functions | |
ROSCONSOLE_DECL void | ros::console::checkLogLocationEnabled (LogLocation *loc) |
Internal. | |
ROSCONSOLE_DECL void | ros::console::formatToBuffer (boost::shared_array< char > &buffer, size_t &buffer_size, const char *fmt,...) |
ROSCONSOLE_DECL std::string | ros::console::formatToString (const char *fmt,...) |
ROSCONSOLE_DECL bool | ros::console::get_loggers (std::map< std::string, levels::Level > &loggers) |
ROSCONSOLE_DECL void | ros::console::initialize () |
Don't call this directly. Performs any required initialization/configuration. Happens automatically when using the macro API. | |
ROSCONSOLE_DECL void | ros::console::initializeLogLocation (LogLocation *loc, const std::string &name, Level level) |
Internal. | |
ROSCONSOLE_DECL void | ros::console::notifyLoggerLevelsChanged () |
Tells the system that a logger's level has changed. | |
ROSCONSOLE_DECL void | ros::console::print (FilterBase *filter, void *logger, Level level, const char *file, int line, const char *function, const char *fmt,...) ROSCONSOLE_PRINTF_ATTRIBUTE(7 |
Don't call this directly. Use the ROS_LOG() macro instead. | |
ROSCONSOLE_DECL void ROSCONSOLE_DECL void | ros::console::print (FilterBase *filter, void *logger, Level level, const std::stringstream &str, const char *file, int line, const char *function) |
ROSCONSOLE_DECL void | ros::console::register_appender (LogAppender *appender) |
ROSCONSOLE_DECL void | ros::console::registerLogLocation (LogLocation *loc) |
Registers a logging location with the system. | |
ROSCONSOLE_DECL bool | ros::console::set_logger_level (const std::string &name, levels::Level level) |
ROSCONSOLE_DECL void | ros::console::setFixedFilterToken (const std::string &key, const std::string &val) |
ROSCONSOLE_DECL void | ros::console::setLogLocationLevel (LogLocation *loc, Level level) |
Internal. | |
ROSCONSOLE_DECL void | ros::console::shutdown () |
ROSCONSOLE_DECL void | ros::console::vformatToBuffer (boost::shared_array< char > &buffer, size_t &buffer_size, const char *fmt, va_list args) |
Variables | |
ROSCONSOLE_DECL Formatter | ros::console::g_formatter |
Only exported because the implementation need it. Do not use directly. | |
ROSCONSOLE_DECL bool | ros::console::g_initialized = false |
Only exported because the macros need it. Do not use directly. | |
ROSCONSOLE_DECL std::string | ros::console::g_last_error_message = "Unknown Error" |
Only exported because the TopicManager need it. Do not use directly. | |
struct ROSCONSOLE_DECL | ros::console::LogLocation |
#define __ROSCONSOLE_FUNCTION__ "" |
#define ROS_LIKELY | ( | x | ) | __builtin_expect((x),1) |
#define ROS_LOG | ( | level, | |
name, | |||
... | |||
) | ROS_LOG_COND(true, level, name, __VA_ARGS__) |
Log to a given named logger at a given verbosity level, with printf-style formatting.
level | One of the levels specified in ros::console::levels::Level |
name | Name of the logger. Note that this is the fully qualified name, and does NOT include "ros.<package_name>". Use ROSCONSOLE_DEFAULT_NAME if you would like to use the default name. |
#define ROS_LOG_COND | ( | cond, | |
level, | |||
name, | |||
... | |||
) |
do \ { \ ROSCONSOLE_DEFINE_LOCATION(cond, level, name); \ \ if (ROS_UNLIKELY(__rosconsole_define_location__enabled)) \ { \ ROSCONSOLE_PRINT_AT_LOCATION(__VA_ARGS__); \ } \ } while(0)
Log to a given named logger at a given verbosity level, only if a given condition has been met, with printf-style formatting.
cond | Boolean condition to be evaluated |
level | One of the levels specified in ros::console::levels::Level |
name | Name of the logger. Note that this is the fully qualified name, and does NOT include "ros.<package_name>". Use ROSCONSOLE_DEFAULT_NAME if you would like to use the default name. |
#define ROS_LOG_DELAYED_THROTTLE | ( | rate, | |
level, | |||
name, | |||
... | |||
) |
do \ { \ ROSCONSOLE_DEFINE_LOCATION(true, level, name); \ ::ros::Time __ros_log_delayed_throttle__now__ = ::ros::Time::now(); \ static double __ros_log_delayed_throttle__last_hit__ = __ros_log_delayed_throttle__now__.toSec(); \ if (ROS_UNLIKELY(__rosconsole_define_location__enabled) && ROS_UNLIKELY(__ros_log_delayed_throttle__last_hit__ + rate <= __ros_log_delayed_throttle__now__.toSec())) \ { \ __ros_log_delayed_throttle__last_hit__ = __ros_log_delayed_throttle__now__.toSec(); \ ROSCONSOLE_PRINT_AT_LOCATION(__VA_ARGS__); \ } \ } while(0)
Log to a given named logger at a given verbosity level, limited to a specific rate of printing, with printf-style formatting.
level | One of the levels specified in ros::console::levels::Level |
name | Name of the logger. Note that this is the fully qualified name, and does NOT include "ros.<package_name>". Use ROSCONSOLE_DEFAULT_NAME if you would like to use the default name. |
rate | The rate it should actually trigger at |
#define ROS_LOG_FILTER | ( | filter, | |
level, | |||
name, | |||
... | |||
) |
do \ { \ ROSCONSOLE_DEFINE_LOCATION(true, level, name); \ if (ROS_UNLIKELY(__rosconsole_define_location__enabled) && (filter)->isEnabled()) \ { \ ROSCONSOLE_PRINT_AT_LOCATION_WITH_FILTER(filter, __VA_ARGS__); \ } \ } while(0)
Log to a given named logger at a given verbosity level, with user-defined filtering, with printf-style formatting.
filter | pointer to the filter to be used |
level | One of the levels specified in ros::console::levels::Level |
name | Name of the logger. Note that this is the fully qualified name, and does NOT include "ros.<package_name>". Use ROSCONSOLE_DEFAULT_NAME if you would like to use the default name. |
#define ROS_LOG_ONCE | ( | level, | |
name, | |||
... | |||
) |
do \ { \ ROSCONSOLE_DEFINE_LOCATION(true, level, name); \ static bool hit = false; \ if (ROS_UNLIKELY(__rosconsole_define_location__enabled) && ROS_UNLIKELY(!hit)) \ { \ hit = true; \ ROSCONSOLE_PRINT_AT_LOCATION(__VA_ARGS__); \ } \ } while(0)
Log to a given named logger at a given verbosity level, only the first time it is hit when enabled, with printf-style formatting.
level | One of the levels specified in ros::console::levels::Level |
name | Name of the logger. Note that this is the fully qualified name, and does NOT include "ros.<package_name>". Use ROSCONSOLE_DEFAULT_NAME if you would like to use the default name. |
#define ROS_LOG_STREAM | ( | level, | |
name, | |||
args | |||
) | ROS_LOG_STREAM_COND(true, level, name, args) |
Log to a given named logger at a given verbosity level, with stream-style formatting.
level | One of the levels specified in ros::console::levels::Level |
name | Name of the logger. Note that this is the fully qualified name, and does NOT include "ros.<package_name>". Use ROSCONSOLE_DEFAULT_NAME if you would like to use the default name. |
#define ROS_LOG_STREAM_COND | ( | cond, | |
level, | |||
name, | |||
args | |||
) |
do \ { \ ROSCONSOLE_DEFINE_LOCATION(cond, level, name); \ if (ROS_UNLIKELY(__rosconsole_define_location__enabled)) \ { \ ROSCONSOLE_PRINT_STREAM_AT_LOCATION(args); \ } \ } while(0)
Log to a given named logger at a given verbosity level, only if a given condition has been met, with stream-style formatting.
cond | Boolean condition to be evaluated |
level | One of the levels specified in ros::console::levels::Level |
name | Name of the logger. Note that this is the fully qualified name, and does NOT include "ros.<package_name>". Use ROSCONSOLE_DEFAULT_NAME if you would like to use the default name. |
#define ROS_LOG_STREAM_DELAYED_THROTTLE | ( | rate, | |
level, | |||
name, | |||
args | |||
) |
do \ { \ ROSCONSOLE_DEFINE_LOCATION(true, level, name); \ ::ros::Time __ros_log_stream_delayed_throttle__now__ = ::ros::Time::now(); \ static double __ros_log_stream_delayed_throttle__last_hit__ = __ros_log_stream_delayed_throttle__now__.toSec(); \ if (ROS_UNLIKELY(__rosconsole_define_location__enabled) && ROS_UNLIKELY(__ros_log_stream_delayed_throttle__last_hit__ + rate <= __ros_log_stream_delayed_throttle__now__.toSec())) \ { \ __ros_log_stream_delayed_throttle__last_hit__ = __ros_log_stream_delayed_throttle__now__.toSec(); \ ROSCONSOLE_PRINT_STREAM_AT_LOCATION(args); \ } \ } while(0)
Log to a given named logger at a given verbosity level, limited to a specific rate of printing and postponed first message.
level | One of the levels specified in ros::console::levels::Level |
name | Name of the logger. Note that this is the fully qualified name, and does NOT include "ros.<package_name>". Use ROSCONSOLE_DEFAULT_NAME if you would like to use the default name. |
rate | The rate it should actually trigger at, and the delay before which no message will be shown. |
#define ROS_LOG_STREAM_FILTER | ( | filter, | |
level, | |||
name, | |||
args | |||
) |
do \ { \ ROSCONSOLE_DEFINE_LOCATION(true, level, name); \ if (ROS_UNLIKELY(__rosconsole_define_location__enabled) && (filter)->isEnabled()) \ { \ ROSCONSOLE_PRINT_STREAM_AT_LOCATION_WITH_FILTER(filter, args); \ } \ } while(0)
Log to a given named logger at a given verbosity level, with user-defined filtering, with stream-style formatting.
cond | Boolean condition to be evaluated |
level | One of the levels specified in ros::console::levels::Level |
name | Name of the logger. Note that this is the fully qualified name, and does NOT include "ros.<package_name>". Use ROSCONSOLE_DEFAULT_NAME if you would like to use the default name. |
#define ROS_LOG_STREAM_ONCE | ( | level, | |
name, | |||
args | |||
) |
do \ { \ ROSCONSOLE_DEFINE_LOCATION(true, level, name); \ static bool __ros_log_stream_once__hit__ = false; \ if (ROS_UNLIKELY(__rosconsole_define_location__enabled) && ROS_UNLIKELY(!__ros_log_stream_once__hit__)) \ { \ __ros_log_stream_once__hit__ = true; \ ROSCONSOLE_PRINT_STREAM_AT_LOCATION(args); \ } \ } while(0)
Log to a given named logger at a given verbosity level, only the first time it is hit when enabled, with printf-style formatting.
level | One of the levels specified in ros::console::levels::Level |
name | Name of the logger. Note that this is the fully qualified name, and does NOT include "ros.<package_name>". Use ROSCONSOLE_DEFAULT_NAME if you would like to use the default name. |
#define ROS_LOG_STREAM_THROTTLE | ( | rate, | |
level, | |||
name, | |||
args | |||
) |
do \ { \ ROSCONSOLE_DEFINE_LOCATION(true, level, name); \ static double __ros_log_stream_throttle__last_hit__ = 0.0; \ ::ros::Time __ros_log_stream_throttle__now__ = ::ros::Time::now(); \ if (ROS_UNLIKELY(__rosconsole_define_location__enabled) && ROS_UNLIKELY(__ros_log_stream_throttle__last_hit__ + rate <= __ros_log_stream_throttle__now__.toSec())) \ { \ __ros_log_stream_throttle__last_hit__ = __ros_log_stream_throttle__now__.toSec(); \ ROSCONSOLE_PRINT_STREAM_AT_LOCATION(args); \ } \ } while(0)
Log to a given named logger at a given verbosity level, limited to a specific rate of printing, with printf-style formatting.
level | One of the levels specified in ros::console::levels::Level |
name | Name of the logger. Note that this is the fully qualified name, and does NOT include "ros.<package_name>". Use ROSCONSOLE_DEFAULT_NAME if you would like to use the default name. |
rate | The rate it should actually trigger at |
#define ROS_LOG_THROTTLE | ( | rate, | |
level, | |||
name, | |||
... | |||
) |
do \ { \ ROSCONSOLE_DEFINE_LOCATION(true, level, name); \ static double last_hit = 0.0; \ ::ros::Time now = ::ros::Time::now(); \ if (ROS_UNLIKELY(__rosconsole_define_location__enabled) && ROS_UNLIKELY(last_hit + rate <= now.toSec())) \ { \ last_hit = now.toSec(); \ ROSCONSOLE_PRINT_AT_LOCATION(__VA_ARGS__); \ } \ } while(0)
Log to a given named logger at a given verbosity level, limited to a specific rate of printing, with printf-style formatting.
level | One of the levels specified in ros::console::levels::Level |
name | Name of the logger. Note that this is the fully qualified name, and does NOT include "ros.<package_name>". Use ROSCONSOLE_DEFAULT_NAME if you would like to use the default name. |
rate | The rate it should actually trigger at |
#define ROS_UNLIKELY | ( | x | ) | __builtin_expect((x),0) |
#define ROSCONSOLE_AUTOINIT |
do \ { \ if (ROS_UNLIKELY(!::ros::console::g_initialized)) \ { \ ::ros::console::initialize(); \ } \ } while(0)
Initializes the rosconsole library. Usually unnecessary to call directly.
#define ROSCONSOLE_DECL |
#define ROSCONSOLE_DEFINE_LOCATION | ( | cond, | |
level, | |||
name | |||
) |
ROSCONSOLE_AUTOINIT; \ static ::ros::console::LogLocation __rosconsole_define_location__loc = {false, false, ::ros::console::levels::Count, 0}; /* Initialized at compile-time */ \ if (ROS_UNLIKELY(!__rosconsole_define_location__loc.initialized_)) \ { \ initializeLogLocation(&__rosconsole_define_location__loc, name, level); \ } \ if (ROS_UNLIKELY(__rosconsole_define_location__loc.level_ != level)) \ { \ setLogLocationLevel(&__rosconsole_define_location__loc, level); \ checkLogLocationEnabled(&__rosconsole_define_location__loc); \ } \ bool __rosconsole_define_location__enabled = __rosconsole_define_location__loc.logger_enabled_ && (cond);
#define ROSCONSOLE_PACKAGE_NAME "unknown_package" |
#define ROSCONSOLE_PRINT_AT_LOCATION | ( | ... | ) | ROSCONSOLE_PRINT_AT_LOCATION_WITH_FILTER(0, __VA_ARGS__) |
#define ROSCONSOLE_PRINT_AT_LOCATION_WITH_FILTER | ( | filter, | |
... | |||
) | ::ros::console::print(filter, __rosconsole_define_location__loc.logger_, __rosconsole_define_location__loc.level_, __FILE__, __LINE__, __ROSCONSOLE_FUNCTION__, __VA_ARGS__) |
#define ROSCONSOLE_PRINT_STREAM_AT_LOCATION | ( | args | ) | ROSCONSOLE_PRINT_STREAM_AT_LOCATION_WITH_FILTER(0, args) |
#define ROSCONSOLE_PRINT_STREAM_AT_LOCATION_WITH_FILTER | ( | filter, | |
args | |||
) |
do \ { \ std::stringstream __rosconsole_print_stream_at_location_with_filter__ss__; \ __rosconsole_print_stream_at_location_with_filter__ss__ << args; \ ::ros::console::print(filter, __rosconsole_define_location__loc.logger_, __rosconsole_define_location__loc.level_, __rosconsole_print_stream_at_location_with_filter__ss__, __FILE__, __LINE__, __ROSCONSOLE_FUNCTION__); \ } while (0)
#define ROSCONSOLE_PRINTF_ATTRIBUTE | ( | a, | |
b | |||
) |
#define ROSCONSOLE_ROOT_LOGGER_NAME "ros" |
#define ROSCONSOLE_SEVERITY_DEBUG 0 |
#define ROSCONSOLE_SEVERITY_ERROR 3 |
#define ROSCONSOLE_SEVERITY_FATAL 4 |
#define ROSCONSOLE_SEVERITY_INFO 1 |
#define ROSCONSOLE_SEVERITY_NONE 5 |
#define ROSCONSOLE_SEVERITY_WARN 2 |