Revert "log: add tag and filter mechanism"

This reverts commit afce0fb0b4.
This commit is contained in:
Adrien Beraud committed 2025-12-10 12:12:05 -05:00
1 parent 0bfd3cd9fc
commit 9f7e4aaa96
4 files changed
+307 -318

No files matched your search

+62 -65
View File
@@ -38,28 +38,27 @@ namespace log {
* Terminal colors for logging
*/
namespace Color {
enum Code {
FG_RED = 31,
FG_GREEN = 32,
FG_YELLOW = 33,
FG_BLUE = 34,
FG_DEFAULT = 39,
BG_RED = 41,
BG_GREEN = 42,
BG_BLUE = 44,
BG_DEFAULT = 49
};
class Modifier
{
const Code code;
public:
constexpr Modifier(Code pCode)
: code(pCode)
{}
friend std::ostream& operator<<(std::ostream& os, const Modifier& mod) { return os << "\033[" << mod.code << 'm'; }
};
} // namespace Color
enum Code {
FG_RED = 31,
FG_GREEN = 32,
FG_YELLOW = 33,
FG_BLUE = 34,
FG_DEFAULT = 39,
BG_RED = 41,
BG_GREEN = 42,
BG_BLUE = 44,
BG_DEFAULT = 49
};
class Modifier {
const Code code;
public:
constexpr Modifier(Code pCode) : code(pCode) {}
friend std::ostream&
operator<<(std::ostream& os, const Modifier& mod) {
return os << "\033[" << mod.code << 'm';
}
};
}
constexpr const Color::Modifier def(Color::FG_DEFAULT);
constexpr const Color::Modifier red(Color::FG_RED);
@@ -69,54 +68,53 @@ constexpr const Color::Modifier yellow(Color::FG_YELLOW);
* Print va_list to std::ostream (used for logging).
*/
void
printfLog(std::ostream& s, std::string_view prefix, const std::string& message)
{
printfLog(std::ostream& s, const std::string& message) {
using namespace std::chrono;
using log_precision = microseconds;
auto num = duration_cast<log_precision>(steady_clock::now().time_since_epoch()).count();
constexpr auto den = log_precision::period::den;
fmt::print(s, "[{:06d}.{:06d}] {}", num / den, num % den, prefix);
fmt::print(s, "[{:06d}.{:06d}] ", num / den, num % den);
s << message << std::endl;
}
void
printLog(std::ostream& s, std::string_view prefix, fmt::string_view format, fmt::format_args args)
{
printLog(std::ostream& s, fmt::string_view format, fmt::format_args args) {
using namespace std::chrono;
using log_precision = microseconds;
auto num = duration_cast<log_precision>(steady_clock::now().time_since_epoch()).count();
constexpr auto den = log_precision::period::den;
fmt::print(s, "[{:06d}.{:06d}] {}", num / den, num % den, prefix);
fmt::print(s, "[{:06d}.{:06d}] ", num / den, num % den);
fmt::vprint(s, format, args);
s << std::endl;
}
std::shared_ptr<Logger>
getStdLogger()
{
return std::make_shared<Logger>([](LogLevel level, std::string_view prefix, std::string&& message) {
if (level == LogLevel::error)
std::cerr << red;
else if (level == LogLevel::warning)
std::cerr << yellow;
printfLog(std::cerr, prefix, message);
std::cerr << def;
});
getStdLogger() {
return std::make_shared<Logger>(
[](LogLevel level, std::string&& message) {
if (level == LogLevel::error)
std::cerr << red;
else if (level == LogLevel::warning)
std::cerr << yellow;
printfLog(std::cerr, message);
std::cerr << def;
}
);
}
std::shared_ptr<Logger>
getFileLogger(const std::string& path)
{
getFileLogger(const std::string &path) {
auto logfile = std::make_shared<std::ofstream>();
logfile->open(path, std::ios::out);
return std::make_shared<Logger>([logfile](LogLevel /*level*/, std::string_view prefix, std::string&& message) {
printfLog(*logfile, prefix, message);
});
return std::make_shared<Logger>(
[logfile](LogLevel /*level*/, std::string&& message) {
printfLog(*logfile, message);
}
);
}
#ifndef _WIN32
constexpr int
syslogLevel(LogLevel level)
{
constexpr
int syslogLevel(LogLevel level) {
switch (level) {
case LogLevel::error:
return LOG_ERR;
@@ -130,13 +128,15 @@ syslogLevel(LogLevel level)
#endif
std::shared_ptr<Logger>
getSyslogLogger(const char* name)
{
getSyslogLogger(const char* name) {
#ifndef _WIN32
struct Syslog
{
explicit Syslog(const char* n) { openlog(n, LOG_NDELAY, LOG_USER); }
~Syslog() { closelog(); }
struct Syslog {
explicit Syslog(const char* n) {
openlog(n, LOG_NDELAY, LOG_USER);
}
~Syslog() {
closelog();
}
};
// syslog is global. Existing instance must be reused.
static std::weak_ptr<Syslog> opened_logfile;
@@ -145,37 +145,34 @@ getSyslogLogger(const char* name)
logfile = std::make_shared<Syslog>(name);
opened_logfile = logfile;
}
return std::make_shared<Logger>([logfile](LogLevel level, std::string_view prefix, std::string&& message) {
syslog(syslogLevel(level), "%.*s%.*s", (int) prefix.size(), prefix.data(), (int) message.size(), message.c_str());
});
return std::make_shared<Logger>(
[logfile](LogLevel level, std::string&& message) {
syslog(syslogLevel(level), "%s", message.c_str());
});
#else
return getStdLogger();
#endif
}
void
enableLogging(dht::DhtRunner& dht)
{
enableLogging(dht::DhtRunner &dht) {
dht.setLogger(getStdLogger());
}
void
enableFileLogging(dht::DhtRunner& dht, const std::string& path)
{
enableFileLogging(dht::DhtRunner &dht, const std::string &path) {
dht.setLogger(getFileLogger(path));
}
OPENDHT_PUBLIC void
enableSyslog(dht::DhtRunner& dht, const char* name)
{
enableSyslog(dht::DhtRunner &dht, const char* name) {
dht.setLogger(getSyslogLogger(name));
}
void
disableLogging(dht::DhtRunner& dht)
{
disableLogging(dht::DhtRunner &dht) {
dht.setLogger();
}
} // namespace log
} // namespace dht
}
}