log: use ANSI colors for strings containing "warning" or "error"
This commit is contained in:
parent
ccac9d4979
commit
24ca07188c
|
|
@ -37,6 +37,7 @@
|
|||
|
||||
#include <cstdint>
|
||||
|
||||
#include <algorithm>
|
||||
#include <string>
|
||||
|
||||
/* set these before calling CheckParm */
|
||||
|
|
@ -405,4 +406,15 @@ bool natstrlt(const char *s1, const char *s2, bool case_sensitive)
|
|||
if (*p1 != 0 && *p2 == 0)
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
std::string_view::const_iterator string_ifind(std::string_view haystack, std::string_view needle)
|
||||
{
|
||||
return std::search(haystack.begin(), haystack.end(), needle.begin(), needle.end(),
|
||||
[](char a, char b) { return tolower(a) == tolower(b); });
|
||||
}
|
||||
|
||||
bool string_icontains(std::string_view haystack, std::string_view needle)
|
||||
{
|
||||
return string_ifind(haystack, needle) != haystack.end();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -68,6 +68,19 @@ void print(flag logflag, const char *str)
|
|||
return;
|
||||
}
|
||||
|
||||
static const char *escape_red = "\033[31m";
|
||||
static const char *escape_yellow = "\033[33m";
|
||||
static const char *escape_reset = "\033[0m";
|
||||
|
||||
std::string ansi_str;
|
||||
if (string_icontains(str, "error")) {
|
||||
ansi_str = fmt::format("{}{}{}", escape_red, str, escape_reset);
|
||||
} else if (string_icontains(str, "warning")) {
|
||||
ansi_str = fmt::format("{}{}{}", escape_yellow, str, escape_reset);
|
||||
} else {
|
||||
ansi_str = str;
|
||||
}
|
||||
|
||||
print_mutex.lock();
|
||||
|
||||
if (logflag != flag::PERCENT) {
|
||||
|
|
@ -79,12 +92,12 @@ void print(flag logflag, const char *str)
|
|||
|
||||
#ifdef _WIN32
|
||||
// print to windows console
|
||||
OutputDebugStringA(str);
|
||||
OutputDebugStringA(ansi_str.c_str());
|
||||
#endif
|
||||
}
|
||||
|
||||
// stdout
|
||||
std::cout << str;
|
||||
std::cout << ansi_str;
|
||||
|
||||
print_mutex.unlock();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -136,6 +136,11 @@ struct natural_case_insensitive_less
|
|||
bool operator()(const std::string &l, const std::string &r) const noexcept { return stlnatstrlt(l, r, false); }
|
||||
};
|
||||
|
||||
#include <string_view>
|
||||
|
||||
std::string_view::const_iterator string_ifind(std::string_view haystack, std::string_view needle);
|
||||
bool string_icontains(std::string_view haystack, std::string_view needle);
|
||||
|
||||
#include <chrono>
|
||||
|
||||
using qclock = std::chrono::high_resolution_clock;
|
||||
|
|
|
|||
Loading…
Reference in New Issue