1.6 KiB
Logging
Logging frontend
The frontend for logging is defined in [logging.h](@ref logging.h).
It provides the following macros for logging:
- LOGMSG_TRACE(channel, msg)
- LOGMSG_DEBUG(channel, msg)
- LOGMSG_INFO(channel, msg)
- LOGMSG_WARN(channel, msg)
- LOGMSG_ERROR(channel, msg)
- LOGMSG_FATAL(channel, msg)
- LOG_FUNC(channel, args)
- LOG_FUNC(channel, args, msg)
- LOG_ASSERT(channel, condition, msg)
- LOG_NOTIMPLEMENTED()
- LOG_INEFFICIENT()
Where the arguments mean the following:
channel
: A string describing the context. For example"carl.core"
.msg
: The actual message as an expression that can be sent to a std::stringstream. For example"foo: " << foo
.args
: A description of the function arguments as an expression likemsg
.condition
: A boolean expression that can be passed toassert()
.
Typically, logging looks like this: @code{.cpp} bool checkStuff(Object o, bool flag) { LOG_FUNC("carl", o << ", " << flag); bool result = o.property(flag); LOGMSG_TRACE("carl", "Result: " << result); return result; } @endcode
Logging is enabled (or disabled) by the LOGGING
macro in CMake.
Logging configuration
As of now, there is no frontend interface to configure logging. Hence, configuration is performed directly on the backend.
Logging backends
As of now, only two logging backends exist.
CArL logging
CArL provides a custom logging mechanism defined in carl::logging.
Fallback logging
If logging is enabled, but no real logging backend is selected, all logging of level WARN
or above goes to std::cerr
.