iceoryx_hoofs 2.0.5
Loading...
Searching...
No Matches
Classes | Typedefs | Enumerations | Functions
iox Namespace Reference

building block to easily create free function for logging in a library context More...

Classes

class  ErrorHandler
 This handler is needed for unit testing, special debugging cases and other corner cases where we'd like to explicitly suppress the error handling. More...
 

Typedefs

using HandlerFunction = std::function< void(const Error error, const std::function< void()>, const ErrorLevel)>
 

Enumerations

enum class  Error : uint32_t
 
enum class  ErrorLevel : uint32_t { FATAL , SEVERE , MODERATE }
 the available error levels FATAL More...
 

Functions

std::ostream & operator<< (std::ostream &stream, Error value) noexcept
 Convenience stream operator to easily use the Error enum with std::ostream.
 
void errorHandler (const Error error, const std::function< void()> &errorCallBack=std::function< void()>(), const ErrorLevel level=ErrorLevel::FATAL) noexcept
 Howto use the error handler correctly 1.) If the error you would like to handle is not listed in ICEORYX_ERRORS(error)... macro just add them like: error(MODULE_NAME__MY_FUNKY_ERROR) Attention: Create an error after the following convention: MODULE_NAME__A_CLEAR_BUT_SHORT_ERROR_DESCRIPTION And a long name is alright!
 

Detailed Description

building block to easily create free function for logging in a library context

// add this to e.g. foo_logging.hpp
// the logger can then be used with e.g. foo::LogInfo() of just LogInfo() in the same namespace
#ifndef FOO_LOGGING_HPP_INCLUDED
#define FOO_LOGGING_HPP_INCLUDED
#include "iceoryx_hoofs/log/logging_free_function_building_block.hpp"
namespace foo
{
struct LoggingComponent
{
static constexpr char Ctx[] = "FOO";
static constexpr char Description[] = "Log context of the FOO component!";
};
static constexpr auto LogFatal = iox::log::ffbb::LogFatal<LoggingComponent>;
static constexpr auto LogError = iox::log::ffbb::LogError<LoggingComponent>;
static constexpr auto LogWarn = iox::log::ffbb::LogWarn<LoggingComponent>;
static constexpr auto LogInfo = iox::log::ffbb::LogInfo<LoggingComponent>;
static constexpr auto LogDebug = iox::log::ffbb::LogDebug<LoggingComponent>;
static constexpr auto LogVerbose = iox::log::ffbb::LogVerbose<LoggingComponent>;
} // namespace foo
#endif // FOO_LOGGING_HPP_INCLUDED
// this needs to be in foo_logging.cpp
namespace foo
{
constexpr char ComponentPosh::Ctx[];
constexpr char ComponentPosh::Description[];
} // namespace foo

Enumeration Type Documentation

◆ ErrorLevel

enum class iox::ErrorLevel : uint32_t
strong

the available error levels FATAL

  • Log message with FATAL
  • RouDi cannot recover from that error. RouDi is terminated
  • Assert (in DEBUG) and terminate
  • Reporting code must handle this and continue or go to a save state. Error handler could return (e.g. in test) SEVERE
  • Log message with ERROR
  • RouDi can still run. Error is reported
  • Assert in DEBUG, in RELEASE continue to run
  • Reporting code must handle this and continue MODERATE
  • Log message with ERROR
  • RouDi can still run. Error is reported
  • NO assert
  • Reporting code must handle this and continue
Enumerator
FATAL 

Log error entry + Assert + terminate.

SEVERE 

warning log entry + Assert

MODERATE 

warning log entry

Function Documentation

◆ errorHandler()

void iox::errorHandler ( const Error  error,
const std::function< void()> &  errorCallBack = std::function< void()>(),
const ErrorLevel  level = ErrorLevel::FATAL 
)
noexcept

Howto use the error handler correctly 1.) If the error you would like to handle is not listed in ICEORYX_ERRORS(error)... macro just add them like: error(MODULE_NAME__MY_FUNKY_ERROR) Attention: Create an error after the following convention: MODULE_NAME__A_CLEAR_BUT_SHORT_ERROR_DESCRIPTION And a long name is alright!

2.) Call errorHandler(Error::kMODULE_NAME__MY_FUNKY_ERROR); Please pay attention to the "k" prefix The defaults for errorCallback and ErrorLevel can also be overwritten: errorHandler( Error::kMODULE_NAME__MY_FUNKY_ERROR, []{ std::cout << "MyCustomCallback" << std::endl; }, ErrorLevel::MODERATE );

class PrettyClass {
float division(float a, float b) {
if ( b == 0.0f ) {
errorHandler(Error::kPRETTY_CLASS__DIVISION_BY_ZERO);
}
}
};
void errorHandler(const Error error, const std::function< void()> &errorCallBack=std::function< void()>(), const ErrorLevel level=ErrorLevel::FATAL) noexcept
Howto use the error handler correctly 1.) If the error you would like to handle is not listed in ICEO...
bool called = false;
auto temporaryErrorHandler = ErrorHandler::setTemporaryErrorHandler(
[&](const Error e, std::function<void()>, const ErrorLevel) {
called = true;
});
errorHandler(Error::kTEST__ASSERT_CALLED);
ASSERT_TRUE(called);
ErrorLevel
the available error levels FATAL
Definition error_handling.hpp:236

◆ operator<<()

std::ostream & iox::operator<< ( std::ostream &  stream,
Error  value 
)
noexcept

Convenience stream operator to easily use the Error enum with std::ostream.

Parameters
[in]streamsink to write the message to
[in]valueto convert to a string literal
Returns
the reference to stream which was provided as input parameter