xo-alloc/include/xo/indentlog/log_level.hpp

77 lines
2.2 KiB
C++

/* @file log_level.hpp */
#pragma once
#include <iostream>
#include <cstdint>
namespace xo {
enum class log_level : std::uint8_t {
/* control log message severity
* silent > always > severe > error > warning > info > chatty > never
*
* never:
* used internally e.g. by XO_ENTER1()
* a log message with this severity will never be printed
*
* always:
* use with XO_ENTER1():
* scope log(XO_ENTER1(always, mydebug_flag));
* to log message whenever mydebug_flag is true (for any .min_log_level except silent)
*
* silent:
* use in log_config to suppress all log messages
*/
never,
verbose,
chatty,
info,
warning,
error,
severe,
always,
silent,
default_level = error
}; /*log_level*/
inline bool
operator>(log_level x, log_level y) {
return (static_cast<std::uint32_t>(x) > static_cast<std::uint32_t>(y));
}
inline bool
operator>=(log_level x, log_level y) {
return (static_cast<std::uint32_t>(x) >= static_cast<std::uint32_t>(y));
}
inline bool
operator<(log_level x, log_level y) {
return (static_cast<std::uint32_t>(x) < static_cast<std::uint32_t>(y));
}
inline bool
operator<=(log_level x, log_level y) {
return (static_cast<std::uint32_t>(x) <= static_cast<std::uint32_t>(y));
}
inline std::ostream &
operator<<(std::ostream & os,
log_level x) {
switch(x) {
case log_level::never: os << "never"; break;
case log_level::verbose: os << "verbose"; break;
case log_level::chatty: os << "chatty"; break;
case log_level::info: os << "info"; break;
case log_level::warning: os << "warning"; break;
case log_level::error: os << "error"; break;
case log_level::severe: os << "severe"; break;
case log_level::always: os << "always"; break;
case log_level::silent: os << "silent"; break;
//default: os << "???"; break;
}
return os;
} /* operator<<*/
} /*namespace xo*/
/* end log_level.hpp */