log: add breakpoints when BREAK_LEVEL is reached
This commit is contained in:
parent
9f6d41eb8c
commit
800d7fef00
54
log.cpp
54
log.cpp
@ -95,27 +95,53 @@ log_level (void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
static bool
|
||||||
|
needs_break (util::level_t level)
|
||||||
|
{
|
||||||
|
static util::level_t break_level;
|
||||||
|
static bool has_level = [&] (void) {
|
||||||
|
const char *env = getenv ("BREAK_LEVEL");
|
||||||
|
if (!env)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
try {
|
||||||
|
break_level = to_level (env);
|
||||||
|
return true;
|
||||||
|
} catch (...) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} ();
|
||||||
|
|
||||||
|
return has_level && level <= break_level;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
void
|
void
|
||||||
util::log (util::level_t level, const std::string &msg)
|
util::log (util::level_t level, const std::string &msg)
|
||||||
{
|
{
|
||||||
static const util::level_t LOG_LEVEL = log_level ();
|
// fire a breakpoint before the following early exit
|
||||||
if (level > LOG_LEVEL)
|
if (needs_break (level))
|
||||||
return;
|
breakpoint ();
|
||||||
|
|
||||||
static const size_t time_len = strlen("YYYY-mm-dd HHMMhSS") + 1;
|
static const util::level_t LOG_LEVEL = log_level ();
|
||||||
std::string time_string (time_len - 1, '\0');
|
if (level > LOG_LEVEL)
|
||||||
time_t unix_time = time (nullptr);
|
return;
|
||||||
|
|
||||||
if (0 == strftime (&time_string[0],
|
static const size_t time_len = strlen("YYYY-mm-dd HHMMhSS") + 1;
|
||||||
time_len,
|
std::string time_string (time_len - 1, '\0');
|
||||||
"%Y-%m-%d %H%Mh%S",
|
time_t unix_time = time (nullptr);
|
||||||
localtime (&unix_time))) {
|
|
||||||
warn ("failed to log time");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::cerr << time_string << " [" << level << "] " << msg << std::endl;
|
if (0 == strftime (&time_string[0],
|
||||||
|
time_len,
|
||||||
|
"%Y-%m-%d %H%Mh%S",
|
||||||
|
localtime (&unix_time))) {
|
||||||
|
warn ("failed to log time");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::cerr << time_string << " [" << level << "] " << msg << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user