Program Listing for File logging_macros.h

Return to documentation for file (include/rcutils/logging_macros.h)

// Copyright 2017 Open Source Robotics Foundation, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#ifndef RCUTILS__LOGGING_MACROS_H_
#define RCUTILS__LOGGING_MACROS_H_

#include "rcutils/logging.h"

#include <stdbool.h>

#ifdef __cplusplus
extern "C"
{
#endif

// These are used for compiling out logging macros lower than a minimum severity.
#define RCUTILS_LOG_MIN_SEVERITY_DEBUG 0
#define RCUTILS_LOG_MIN_SEVERITY_INFO 1
#define RCUTILS_LOG_MIN_SEVERITY_WARN 2
#define RCUTILS_LOG_MIN_SEVERITY_ERROR 3
#define RCUTILS_LOG_MIN_SEVERITY_FATAL 4
#define RCUTILS_LOG_MIN_SEVERITY_NONE 5

#ifndef RCUTILS_LOG_MIN_SEVERITY
#define RCUTILS_LOG_MIN_SEVERITY RCUTILS_LOG_MIN_SEVERITY_DEBUG
#endif

#define RCUTILS_LOG_NAMED(severity, name, ...) \
  do { \
    RCUTILS_LOGGING_AUTOINIT; \
    static rcutils_log_location_t __rcutils_logging_location = {__func__, __FILE__, __LINE__}; \
    if (rcutils_logging_logger_is_enabled_for(name, severity)) { \
      rcutils_log_internal(&__rcutils_logging_location, severity, name, __VA_ARGS__); \
    } \
  } while (0)

#define RCUTILS_LOG(severity, ...) RCUTILS_LOG_NAMED(severity, NULL, __VA_ARGS__)

#define RCUTILS_LOG_ONCE_NAMED(severity, name, ...) \
  do { \
    RCUTILS_LOGGING_AUTOINIT; \
    static rcutils_log_location_t __rcutils_logging_location = {__func__, __FILE__, __LINE__}; \
    if (rcutils_logging_logger_is_enabled_for(name, severity)) { \
      static int __rcutils_logging_once = 0; \
      if (RCUTILS_UNLIKELY(0 == __rcutils_logging_once)) { \
        __rcutils_logging_once = 1; \
        rcutils_log_internal(&__rcutils_logging_location, severity, name, __VA_ARGS__); \
      } \
    } \
  } while (0)

#define RCUTILS_LOG_ONCE(severity, ...) RCUTILS_LOG_ONCE_NAMED(severity, NULL, __VA_ARGS__)

#define RCUTILS_LOG_CONDITION_NAMED(severity, condition, name, ...) \
  do { \
    RCUTILS_LOGGING_AUTOINIT; \
    static rcutils_log_location_t __rcutils_logging_location = {__func__, __FILE__, __LINE__}; \
    if (rcutils_logging_logger_is_enabled_for(name, severity)) { \
      if (condition) { \
        rcutils_log_internal(&__rcutils_logging_location, severity, name, __VA_ARGS__); \
      } \
    } \
  } while (0)

#define RCUTILS_LOG_EXPRESSION_NAMED(severity, expression, name, ...) \
  RCUTILS_LOG_CONDITION_NAMED(severity, expression, name, __VA_ARGS__)

#define RCUTILS_LOG_EXPRESSION(severity, expression, ...) \
  RCUTILS_LOG_CONDITION_NAMED(severity, expression, NULL, __VA_ARGS__)

#define RCUTILS_LOG_FUNCTION_NAMED(severity, function, name, ...) \
  RCUTILS_LOG_CONDITION_NAMED(severity, (*function)(), name, __VA_ARGS__)

#define RCUTILS_LOG_FUNCTION(severity, function, ...) \
  RCUTILS_LOG_CONDITION_NAMED(severity, (*function)(), NULL, __VA_ARGS__)

#define RCUTILS_LOG_SKIPFIRST_NAMED(severity, name, ...) \
  do { \
    RCUTILS_LOGGING_AUTOINIT; \
    static rcutils_log_location_t __rcutils_logging_location = {__func__, __FILE__, __LINE__}; \
    if (rcutils_logging_logger_is_enabled_for(name, severity)) { \
      static bool __rcutils_logging_first = true; \
      if (RCUTILS_UNLIKELY(true == __rcutils_logging_first)) { \
        __rcutils_logging_first = false; \
      } else { \
        rcutils_log_internal(&__rcutils_logging_location, severity, name, __VA_ARGS__); \
      } \
    } \
  } while (0)

#define RCUTILS_LOG_SKIPFIRST(severity, ...) \
  RCUTILS_LOG_SKIPFIRST_NAMED(severity, NULL, __VA_ARGS__)

#define RCUTILS_LOG_THROTTLE_NAMED(severity, get_time_point, duration, name, ...) \
  do { \
    RCUTILS_LOGGING_AUTOINIT; \
    static rcutils_log_location_t __rcutils_logging_location = {__func__, __FILE__, __LINE__}; \
    if (rcutils_logging_logger_is_enabled_for(name, severity)) { \
      static rcutils_duration_value_t __rcutils_logging_duration = RCUTILS_MS_TO_NS(duration); \
      static rcutils_time_point_value_t __rcutils_logging_last_logged = 0; \
      rcutils_time_point_value_t __rcutils_logging_now = 0; \
      bool __rcutils_logging_condition = true; \
      if (get_time_point(&__rcutils_logging_now) != RCUTILS_RET_OK) { \
        rcutils_log( \
            &__rcutils_logging_location, RCUTILS_LOG_SEVERITY_ERROR, "", \
            "%s() at %s:%d getting current steady time failed\n", \
            __func__, __FILE__, __LINE__); \
      } else { \
        __rcutils_logging_condition = __rcutils_logging_now >= \
          __rcutils_logging_last_logged + __rcutils_logging_duration; \
      } \
      if (RCUTILS_LIKELY(__rcutils_logging_condition)) { \
        __rcutils_logging_last_logged = __rcutils_logging_now; \
        rcutils_log_internal(&__rcutils_logging_location, severity, name, __VA_ARGS__); \
      } \
    } \
  } while (0)

#define RCUTILS_LOG_THROTTLE(severity, get_time_point, duration, ...) \
  RCUTILS_LOG_THROTTLE_NAMED(severity, get_time_point, duration, NULL, __VA_ARGS__)

#define RCUTILS_LOG_SKIPFIRST_THROTTLE_NAMED(severity, get_time_point, duration, name, ...) \
  do { \
    RCUTILS_LOGGING_AUTOINIT; \
    static rcutils_log_location_t __rcutils_logging_location = {__func__, __FILE__, __LINE__}; \
    if (rcutils_logging_logger_is_enabled_for(name, severity)) { \
      static rcutils_duration_value_t __rcutils_logging_duration = RCUTILS_MS_TO_NS(duration); \
      static rcutils_time_point_value_t __rcutils_logging_last_logged = 0; \
      rcutils_time_point_value_t __rcutils_logging_now = 0; \
      bool __rcutils_logging_condition = true; \
      if (get_time_point(&__rcutils_logging_now) != RCUTILS_RET_OK) { \
        rcutils_log( \
            &__rcutils_logging_location, RCUTILS_LOG_SEVERITY_ERROR, "", \
            "%s() at %s:%d getting current steady time failed\n", \
            __func__, __FILE__, __LINE__); \
      } else { \
        __rcutils_logging_condition = __rcutils_logging_now >= \
          __rcutils_logging_last_logged + __rcutils_logging_duration; \
      } \
      if (RCUTILS_LIKELY(__rcutils_logging_condition)) { \
        __rcutils_logging_last_logged = __rcutils_logging_now; \
        static bool __rcutils_logging_first = true; \
        if (RCUTILS_UNLIKELY(true == __rcutils_logging_first)) { \
          __rcutils_logging_first = false; \
        } else { \
          rcutils_log_internal(&__rcutils_logging_location, severity, name, __VA_ARGS__); \
        } \
      } \
    } \
  } while (0)

#define RCUTILS_LOG_SKIPFIRST_THROTTLE(severity, get_time_point, duration, ...) \
  RCUTILS_LOG_SKIPFIRST_THROTTLE_NAMED(severity, get_time_point, duration, NULL, __VA_ARGS__)

#if (RCUTILS_LOG_MIN_SEVERITY > RCUTILS_LOG_MIN_SEVERITY_DEBUG)
// empty logging macros for severity DEBUG when disabled at compile time
# define RCUTILS_LOG_DEBUG(format, ...)
# define RCUTILS_LOG_DEBUG_NAMED(name, format, ...)
# define RCUTILS_LOG_DEBUG_ONCE(format, ...)
# define RCUTILS_LOG_DEBUG_ONCE_NAMED(name, format, ...)
# define RCUTILS_LOG_DEBUG_EXPRESSION(expression, format, ...)
# define RCUTILS_LOG_DEBUG_EXPRESSION_NAMED(expression, name, format, ...)
# define RCUTILS_LOG_DEBUG_FUNCTION(function, format, ...)
# define RCUTILS_LOG_DEBUG_FUNCTION_NAMED(function, name, format, ...)
# define RCUTILS_LOG_DEBUG_SKIPFIRST(format, ...)
# define RCUTILS_LOG_DEBUG_SKIPFIRST_NAMED(name, format, ...)
# define RCUTILS_LOG_DEBUG_THROTTLE(get_time_point, duration, format, ...)
# define RCUTILS_LOG_DEBUG_SKIPFIRST_THROTTLE(get_time_point, duration, format, ...)
# define RCUTILS_LOG_DEBUG_THROTTLE_NAMED(get_time_point, duration, name, format, ...)
# define RCUTILS_LOG_DEBUG_SKIPFIRST_THROTTLE_NAMED(get_time_point, duration, name, format, ...)
#else
# define RCUTILS_LOG_DEBUG(...) RCUTILS_LOG(RCUTILS_LOG_SEVERITY_DEBUG, __VA_ARGS__)
# define RCUTILS_LOG_DEBUG_NAMED(name, ...) \
  RCUTILS_LOG_NAMED(RCUTILS_LOG_SEVERITY_DEBUG, name, __VA_ARGS__)
# define RCUTILS_LOG_DEBUG_ONCE(...) RCUTILS_LOG_ONCE(RCUTILS_LOG_SEVERITY_DEBUG, __VA_ARGS__)
# define RCUTILS_LOG_DEBUG_ONCE_NAMED(name, ...) \
  RCUTILS_LOG_ONCE_NAMED(RCUTILS_LOG_SEVERITY_DEBUG, name, __VA_ARGS__)
# define RCUTILS_LOG_DEBUG_EXPRESSION(expression, ...) \
  RCUTILS_LOG_EXPRESSION(RCUTILS_LOG_SEVERITY_DEBUG, expression, __VA_ARGS__)
# define RCUTILS_LOG_DEBUG_EXPRESSION_NAMED(expression, name, ...) \
  RCUTILS_LOG_EXPRESSION_NAMED(RCUTILS_LOG_SEVERITY_DEBUG, expression, name, __VA_ARGS__)
# define RCUTILS_LOG_DEBUG_FUNCTION(function, ...) \
  RCUTILS_LOG_FUNCTION(RCUTILS_LOG_SEVERITY_DEBUG, function, __VA_ARGS__)
# define RCUTILS_LOG_DEBUG_FUNCTION_NAMED(function, name, ...) \
  RCUTILS_LOG_FUNCTION_NAMED(RCUTILS_LOG_SEVERITY_DEBUG, function, name, __VA_ARGS__)
# define RCUTILS_LOG_DEBUG_SKIPFIRST(...) \
  RCUTILS_LOG_SKIPFIRST(RCUTILS_LOG_SEVERITY_DEBUG, __VA_ARGS__)
# define RCUTILS_LOG_DEBUG_SKIPFIRST_NAMED(name, ...) \
  RCUTILS_LOG_SKIPFIRST_NAMED(RCUTILS_LOG_SEVERITY_DEBUG, name, __VA_ARGS__)
# define RCUTILS_LOG_DEBUG_THROTTLE(get_time_point, duration, ...) \
  RCUTILS_LOG_THROTTLE(RCUTILS_LOG_SEVERITY_DEBUG, get_time_point, duration, __VA_ARGS__)
# define RCUTILS_LOG_DEBUG_THROTTLE_NAMED(get_time_point, duration, name, ...) \
  RCUTILS_LOG_THROTTLE_NAMED(RCUTILS_LOG_SEVERITY_DEBUG, get_time_point, duration, name, \
    __VA_ARGS__)
# define RCUTILS_LOG_DEBUG_SKIPFIRST_THROTTLE(get_time_point, duration, ...) \
  RCUTILS_LOG_SKIPFIRST_THROTTLE(RCUTILS_LOG_SEVERITY_DEBUG, get_time_point, duration, __VA_ARGS__)
# define RCUTILS_LOG_DEBUG_SKIPFIRST_THROTTLE_NAMED(get_time_point, duration, name, ...) \
  RCUTILS_LOG_SKIPFIRST_THROTTLE_NAMED(RCUTILS_LOG_SEVERITY_DEBUG, get_time_point, duration, name, \
    __VA_ARGS__)
#endif

#if (RCUTILS_LOG_MIN_SEVERITY > RCUTILS_LOG_MIN_SEVERITY_INFO)
// empty logging macros for severity INFO when disabled at compile time
# define RCUTILS_LOG_INFO(format, ...)
# define RCUTILS_LOG_INFO_NAMED(name, format, ...)
# define RCUTILS_LOG_INFO_ONCE(format, ...)
# define RCUTILS_LOG_INFO_ONCE_NAMED(name, format, ...)
# define RCUTILS_LOG_INFO_EXPRESSION(expression, format, ...)
# define RCUTILS_LOG_INFO_EXPRESSION_NAMED(expression, name, format, ...)
# define RCUTILS_LOG_INFO_FUNCTION(function, format, ...)
# define RCUTILS_LOG_INFO_FUNCTION_NAMED(function, name, format, ...)
# define RCUTILS_LOG_INFO_SKIPFIRST(format, ...)
# define RCUTILS_LOG_INFO_SKIPFIRST_NAMED(name, format, ...)
# define RCUTILS_LOG_INFO_THROTTLE(get_time_point, duration, format, ...)
# define RCUTILS_LOG_INFO_SKIPFIRST_THROTTLE(get_time_point, duration, format, ...)
# define RCUTILS_LOG_INFO_THROTTLE_NAMED(get_time_point, duration, name, format, ...)
# define RCUTILS_LOG_INFO_SKIPFIRST_THROTTLE_NAMED(get_time_point, duration, name, format, ...)
#else
# define RCUTILS_LOG_INFO(...) RCUTILS_LOG(RCUTILS_LOG_SEVERITY_INFO, __VA_ARGS__)
# define RCUTILS_LOG_INFO_NAMED(name, ...) \
  RCUTILS_LOG_NAMED(RCUTILS_LOG_SEVERITY_INFO, name, __VA_ARGS__)
# define RCUTILS_LOG_INFO_ONCE(...) RCUTILS_LOG_ONCE(RCUTILS_LOG_SEVERITY_INFO, __VA_ARGS__)
# define RCUTILS_LOG_INFO_ONCE_NAMED(name, ...) \
  RCUTILS_LOG_ONCE_NAMED(RCUTILS_LOG_SEVERITY_INFO, name, __VA_ARGS__)
# define RCUTILS_LOG_INFO_EXPRESSION(expression, ...) \
  RCUTILS_LOG_EXPRESSION(RCUTILS_LOG_SEVERITY_INFO, expression, __VA_ARGS__)
# define RCUTILS_LOG_INFO_EXPRESSION_NAMED(expression, name, ...) \
  RCUTILS_LOG_EXPRESSION_NAMED(RCUTILS_LOG_SEVERITY_INFO, expression, name, __VA_ARGS__)
# define RCUTILS_LOG_INFO_FUNCTION(function, ...) \
  RCUTILS_LOG_FUNCTION(RCUTILS_LOG_SEVERITY_INFO, function, __VA_ARGS__)
# define RCUTILS_LOG_INFO_FUNCTION_NAMED(function, name, ...) \
  RCUTILS_LOG_FUNCTION_NAMED(RCUTILS_LOG_SEVERITY_INFO, function, name, __VA_ARGS__)
# define RCUTILS_LOG_INFO_SKIPFIRST(...) \
  RCUTILS_LOG_SKIPFIRST(RCUTILS_LOG_SEVERITY_INFO, __VA_ARGS__)
# define RCUTILS_LOG_INFO_SKIPFIRST_NAMED(name, ...) \
  RCUTILS_LOG_SKIPFIRST_NAMED(RCUTILS_LOG_SEVERITY_INFO, name, __VA_ARGS__)
# define RCUTILS_LOG_INFO_THROTTLE(get_time_point, duration, ...) \
  RCUTILS_LOG_THROTTLE(RCUTILS_LOG_SEVERITY_INFO, get_time_point, duration, __VA_ARGS__)
# define RCUTILS_LOG_INFO_THROTTLE_NAMED(get_time_point, duration, name, ...) \
  RCUTILS_LOG_THROTTLE_NAMED(RCUTILS_LOG_SEVERITY_INFO, get_time_point, duration, name, __VA_ARGS__)
# define RCUTILS_LOG_INFO_SKIPFIRST_THROTTLE(get_time_point, duration, ...) \
  RCUTILS_LOG_SKIPFIRST_THROTTLE(RCUTILS_LOG_SEVERITY_INFO, get_time_point, duration, __VA_ARGS__)
# define RCUTILS_LOG_INFO_SKIPFIRST_THROTTLE_NAMED(get_time_point, duration, name, ...) \
  RCUTILS_LOG_SKIPFIRST_THROTTLE_NAMED(RCUTILS_LOG_SEVERITY_INFO, get_time_point, duration, name, \
    __VA_ARGS__)
#endif

#if (RCUTILS_LOG_MIN_SEVERITY > RCUTILS_LOG_MIN_SEVERITY_WARN)
// empty logging macros for severity WARN when disabled at compile time
# define RCUTILS_LOG_WARN(format, ...)
# define RCUTILS_LOG_WARN_NAMED(name, format, ...)
# define RCUTILS_LOG_WARN_ONCE(format, ...)
# define RCUTILS_LOG_WARN_ONCE_NAMED(name, format, ...)
# define RCUTILS_LOG_WARN_EXPRESSION(expression, format, ...)
# define RCUTILS_LOG_WARN_EXPRESSION_NAMED(expression, name, format, ...)
# define RCUTILS_LOG_WARN_FUNCTION(function, format, ...)
# define RCUTILS_LOG_WARN_FUNCTION_NAMED(function, name, format, ...)
# define RCUTILS_LOG_WARN_SKIPFIRST(format, ...)
# define RCUTILS_LOG_WARN_SKIPFIRST_NAMED(name, format, ...)
# define RCUTILS_LOG_WARN_THROTTLE(get_time_point, duration, format, ...)
# define RCUTILS_LOG_WARN_SKIPFIRST_THROTTLE(get_time_point, duration, format, ...)
# define RCUTILS_LOG_WARN_THROTTLE_NAMED(get_time_point, duration, name, format, ...)
# define RCUTILS_LOG_WARN_SKIPFIRST_THROTTLE_NAMED(get_time_point, duration, name, format, ...)
#else
# define RCUTILS_LOG_WARN(...) RCUTILS_LOG(RCUTILS_LOG_SEVERITY_WARN, __VA_ARGS__)
# define RCUTILS_LOG_WARN_NAMED(name, ...) \
  RCUTILS_LOG_NAMED(RCUTILS_LOG_SEVERITY_WARN, name, __VA_ARGS__)
# define RCUTILS_LOG_WARN_ONCE(...) RCUTILS_LOG_ONCE(RCUTILS_LOG_SEVERITY_WARN, __VA_ARGS__)
# define RCUTILS_LOG_WARN_ONCE_NAMED(name, ...) \
  RCUTILS_LOG_ONCE_NAMED(RCUTILS_LOG_SEVERITY_WARN, name, __VA_ARGS__)
# define RCUTILS_LOG_WARN_EXPRESSION(expression, ...) \
  RCUTILS_LOG_EXPRESSION(RCUTILS_LOG_SEVERITY_WARN, expression, __VA_ARGS__)
# define RCUTILS_LOG_WARN_EXPRESSION_NAMED(expression, name, ...) \
  RCUTILS_LOG_EXPRESSION_NAMED(RCUTILS_LOG_SEVERITY_WARN, expression, name, __VA_ARGS__)
# define RCUTILS_LOG_WARN_FUNCTION(function, ...) \
  RCUTILS_LOG_FUNCTION(RCUTILS_LOG_SEVERITY_WARN, function, __VA_ARGS__)
# define RCUTILS_LOG_WARN_FUNCTION_NAMED(function, name, ...) \
  RCUTILS_LOG_FUNCTION_NAMED(RCUTILS_LOG_SEVERITY_WARN, function, name, __VA_ARGS__)
# define RCUTILS_LOG_WARN_SKIPFIRST(...) \
  RCUTILS_LOG_SKIPFIRST(RCUTILS_LOG_SEVERITY_WARN, __VA_ARGS__)
# define RCUTILS_LOG_WARN_SKIPFIRST_NAMED(name, ...) \
  RCUTILS_LOG_SKIPFIRST_NAMED(RCUTILS_LOG_SEVERITY_WARN, name, __VA_ARGS__)
# define RCUTILS_LOG_WARN_THROTTLE(get_time_point, duration, ...) \
  RCUTILS_LOG_THROTTLE(RCUTILS_LOG_SEVERITY_WARN, get_time_point, duration, __VA_ARGS__)
# define RCUTILS_LOG_WARN_THROTTLE_NAMED(get_time_point, duration, name, ...) \
  RCUTILS_LOG_THROTTLE_NAMED(RCUTILS_LOG_SEVERITY_WARN, get_time_point, duration, name, __VA_ARGS__)
# define RCUTILS_LOG_WARN_SKIPFIRST_THROTTLE(get_time_point, duration, ...) \
  RCUTILS_LOG_SKIPFIRST_THROTTLE(RCUTILS_LOG_SEVERITY_WARN, get_time_point, duration, __VA_ARGS__)
# define RCUTILS_LOG_WARN_SKIPFIRST_THROTTLE_NAMED(get_time_point, duration, name, ...) \
  RCUTILS_LOG_SKIPFIRST_THROTTLE_NAMED(RCUTILS_LOG_SEVERITY_WARN, get_time_point, duration, name, \
    __VA_ARGS__)
#endif

#if (RCUTILS_LOG_MIN_SEVERITY > RCUTILS_LOG_MIN_SEVERITY_ERROR)
// empty logging macros for severity ERROR when disabled at compile time
# define RCUTILS_LOG_ERROR(format, ...)
# define RCUTILS_LOG_ERROR_NAMED(name, format, ...)
# define RCUTILS_LOG_ERROR_ONCE(format, ...)
# define RCUTILS_LOG_ERROR_ONCE_NAMED(name, format, ...)
# define RCUTILS_LOG_ERROR_EXPRESSION(expression, format, ...)
# define RCUTILS_LOG_ERROR_EXPRESSION_NAMED(expression, name, format, ...)
# define RCUTILS_LOG_ERROR_FUNCTION(function, format, ...)
# define RCUTILS_LOG_ERROR_FUNCTION_NAMED(function, name, format, ...)
# define RCUTILS_LOG_ERROR_SKIPFIRST(format, ...)
# define RCUTILS_LOG_ERROR_SKIPFIRST_NAMED(name, format, ...)
# define RCUTILS_LOG_ERROR_THROTTLE(get_time_point, duration, format, ...)
# define RCUTILS_LOG_ERROR_SKIPFIRST_THROTTLE(get_time_point, duration, format, ...)
# define RCUTILS_LOG_ERROR_THROTTLE_NAMED(get_time_point, duration, name, format, ...)
# define RCUTILS_LOG_ERROR_SKIPFIRST_THROTTLE_NAMED(get_time_point, duration, name, format, ...)
#else
# define RCUTILS_LOG_ERROR(...) RCUTILS_LOG(RCUTILS_LOG_SEVERITY_ERROR, __VA_ARGS__)
# define RCUTILS_LOG_ERROR_NAMED(name, ...) \
  RCUTILS_LOG_NAMED(RCUTILS_LOG_SEVERITY_ERROR, name, __VA_ARGS__)
# define RCUTILS_LOG_ERROR_ONCE(...) RCUTILS_LOG_ONCE(RCUTILS_LOG_SEVERITY_ERROR, __VA_ARGS__)
# define RCUTILS_LOG_ERROR_ONCE_NAMED(name, ...) \
  RCUTILS_LOG_ONCE_NAMED(RCUTILS_LOG_SEVERITY_ERROR, name, __VA_ARGS__)
# define RCUTILS_LOG_ERROR_EXPRESSION(expression, ...) \
  RCUTILS_LOG_EXPRESSION(RCUTILS_LOG_SEVERITY_ERROR, expression, __VA_ARGS__)
# define RCUTILS_LOG_ERROR_EXPRESSION_NAMED(expression, name, ...) \
  RCUTILS_LOG_EXPRESSION_NAMED(RCUTILS_LOG_SEVERITY_ERROR, expression, name, __VA_ARGS__)
# define RCUTILS_LOG_ERROR_FUNCTION(function, ...) \
  RCUTILS_LOG_FUNCTION(RCUTILS_LOG_SEVERITY_ERROR, function, __VA_ARGS__)
# define RCUTILS_LOG_ERROR_FUNCTION_NAMED(function, name, ...) \
  RCUTILS_LOG_FUNCTION_NAMED(RCUTILS_LOG_SEVERITY_ERROR, function, name, __VA_ARGS__)
# define RCUTILS_LOG_ERROR_SKIPFIRST(...) \
  RCUTILS_LOG_SKIPFIRST(RCUTILS_LOG_SEVERITY_ERROR, __VA_ARGS__)
# define RCUTILS_LOG_ERROR_SKIPFIRST_NAMED(name, ...) \
  RCUTILS_LOG_SKIPFIRST_NAMED(RCUTILS_LOG_SEVERITY_ERROR, name, __VA_ARGS__)
# define RCUTILS_LOG_ERROR_THROTTLE(get_time_point, duration, ...) \
  RCUTILS_LOG_THROTTLE(RCUTILS_LOG_SEVERITY_ERROR, get_time_point, duration, __VA_ARGS__)
# define RCUTILS_LOG_ERROR_THROTTLE_NAMED(get_time_point, duration, name, ...) \
  RCUTILS_LOG_THROTTLE_NAMED(RCUTILS_LOG_SEVERITY_ERROR, get_time_point, duration, name, \
    __VA_ARGS__)
# define RCUTILS_LOG_ERROR_SKIPFIRST_THROTTLE(get_time_point, duration, ...) \
  RCUTILS_LOG_SKIPFIRST_THROTTLE(RCUTILS_LOG_SEVERITY_ERROR, get_time_point, duration, __VA_ARGS__)
# define RCUTILS_LOG_ERROR_SKIPFIRST_THROTTLE_NAMED(get_time_point, duration, name, ...) \
  RCUTILS_LOG_SKIPFIRST_THROTTLE_NAMED(RCUTILS_LOG_SEVERITY_ERROR, get_time_point, duration, name, \
    __VA_ARGS__)
#endif

#if (RCUTILS_LOG_MIN_SEVERITY > RCUTILS_LOG_MIN_SEVERITY_FATAL)
// empty logging macros for severity FATAL when disabled at compile time
# define RCUTILS_LOG_FATAL(format, ...)
# define RCUTILS_LOG_FATAL_NAMED(name, format, ...)
# define RCUTILS_LOG_FATAL_ONCE(format, ...)
# define RCUTILS_LOG_FATAL_ONCE_NAMED(name, format, ...)
# define RCUTILS_LOG_FATAL_EXPRESSION(expression, format, ...)
# define RCUTILS_LOG_FATAL_EXPRESSION_NAMED(expression, name, format, ...)
# define RCUTILS_LOG_FATAL_FUNCTION(function, format, ...)
# define RCUTILS_LOG_FATAL_FUNCTION_NAMED(function, name, format, ...)
# define RCUTILS_LOG_FATAL_SKIPFIRST(format, ...)
# define RCUTILS_LOG_FATAL_SKIPFIRST_NAMED(name, format, ...)
# define RCUTILS_LOG_FATAL_THROTTLE(get_time_point, duration, format, ...)
# define RCUTILS_LOG_FATAL_SKIPFIRST_THROTTLE(get_time_point, duration, format, ...)
# define RCUTILS_LOG_FATAL_THROTTLE_NAMED(get_time_point, duration, name, format, ...)
# define RCUTILS_LOG_FATAL_SKIPFIRST_THROTTLE_NAMED(get_time_point, duration, name, format, ...)
#else
# define RCUTILS_LOG_FATAL(...) RCUTILS_LOG(RCUTILS_LOG_SEVERITY_FATAL, __VA_ARGS__)
# define RCUTILS_LOG_FATAL_NAMED(name, ...) \
  RCUTILS_LOG_NAMED(RCUTILS_LOG_SEVERITY_FATAL, name, __VA_ARGS__)
# define RCUTILS_LOG_FATAL_ONCE(...) RCUTILS_LOG_ONCE(RCUTILS_LOG_SEVERITY_FATAL, __VA_ARGS__)
# define RCUTILS_LOG_FATAL_ONCE_NAMED(name, ...) \
  RCUTILS_LOG_ONCE_NAMED(RCUTILS_LOG_SEVERITY_FATAL, name, __VA_ARGS__)
# define RCUTILS_LOG_FATAL_EXPRESSION(expression, ...) \
  RCUTILS_LOG_EXPRESSION(RCUTILS_LOG_SEVERITY_FATAL, expression, __VA_ARGS__)
# define RCUTILS_LOG_FATAL_EXPRESSION_NAMED(expression, name, ...) \
  RCUTILS_LOG_EXPRESSION_NAMED(RCUTILS_LOG_SEVERITY_FATAL, expression, name, __VA_ARGS__)
# define RCUTILS_LOG_FATAL_FUNCTION(function, ...) \
  RCUTILS_LOG_FUNCTION(RCUTILS_LOG_SEVERITY_FATAL, function, __VA_ARGS__)
# define RCUTILS_LOG_FATAL_FUNCTION_NAMED(function, name, ...) \
  RCUTILS_LOG_FUNCTION_NAMED(RCUTILS_LOG_SEVERITY_FATAL, function, name, __VA_ARGS__)
# define RCUTILS_LOG_FATAL_SKIPFIRST(...) \
  RCUTILS_LOG_SKIPFIRST(RCUTILS_LOG_SEVERITY_FATAL, __VA_ARGS__)
# define RCUTILS_LOG_FATAL_SKIPFIRST_NAMED(name, ...) \
  RCUTILS_LOG_SKIPFIRST_NAMED(RCUTILS_LOG_SEVERITY_FATAL, name, __VA_ARGS__)
# define RCUTILS_LOG_FATAL_THROTTLE(get_time_point, duration, ...) \
  RCUTILS_LOG_THROTTLE(RCUTILS_LOG_SEVERITY_FATAL, get_time_point, duration, __VA_ARGS__)
# define RCUTILS_LOG_FATAL_THROTTLE_NAMED(get_time_point, duration, name, ...) \
  RCUTILS_LOG_THROTTLE_NAMED(RCUTILS_LOG_SEVERITY_FATAL, get_time_point, duration, name, \
    __VA_ARGS__)
# define RCUTILS_LOG_FATAL_SKIPFIRST_THROTTLE(get_time_point, duration, ...) \
  RCUTILS_LOG_SKIPFIRST_THROTTLE(RCUTILS_LOG_SEVERITY_FATAL, get_time_point, duration, __VA_ARGS__)
# define RCUTILS_LOG_FATAL_SKIPFIRST_THROTTLE_NAMED(get_time_point, duration, name, ...) \
  RCUTILS_LOG_SKIPFIRST_THROTTLE_NAMED(RCUTILS_LOG_SEVERITY_FATAL, get_time_point, duration, name, \
    __VA_ARGS__)
#endif

#ifdef __cplusplus
}
#endif

#endif  // RCUTILS__LOGGING_MACROS_H_