add libfmt to replace current logging mechanism
Signed-off-by: Amneesh Singh <natto@weirdnatto.in>
This commit is contained in:
10
flake.nix
10
flake.nix
@@ -19,7 +19,14 @@
|
||||
llvm = pkgs.llvmPackages_16;
|
||||
stdenv = llvm.libcxxStdenv;
|
||||
|
||||
nativeBuildInputs = with pkgs; [ meson ninja ];
|
||||
nativeBuildInputs = with pkgs; [
|
||||
meson
|
||||
ninja
|
||||
|
||||
# libraries
|
||||
pkg-config
|
||||
fmt.dev
|
||||
];
|
||||
in
|
||||
rec {
|
||||
packages = rec {
|
||||
@@ -49,7 +56,6 @@
|
||||
|
||||
# other tools
|
||||
valgrind
|
||||
|
||||
llvm.lldb
|
||||
]);
|
||||
};
|
||||
|
@@ -1,49 +0,0 @@
|
||||
#include "log.hh"
|
||||
|
||||
namespace logging {
|
||||
|
||||
namespace ansi {
|
||||
static const char* RED = "\033[31m";
|
||||
static const char* YELLOW = "\033[33m";
|
||||
static const char* MAGENTA = "\033[35m";
|
||||
static const char* WHITE = "\033[37m";
|
||||
static const char* BOLD = "\033[1m";
|
||||
static const char* RESET = "\033[0m";
|
||||
}
|
||||
|
||||
Logger::Logger(std::ostream& os)
|
||||
: os(os){};
|
||||
|
||||
void
|
||||
Logger::set_level(Level level) {
|
||||
switch (level) {
|
||||
case Level::Debug:
|
||||
os << ansi::MAGENTA << ansi::BOLD << "[DEBUG] ";
|
||||
break;
|
||||
|
||||
case Level::Info:
|
||||
os << ansi::WHITE << "[INFO] ";
|
||||
break;
|
||||
|
||||
case Level::Warn:
|
||||
os << ansi::YELLOW << "[WARN] ";
|
||||
break;
|
||||
|
||||
case Level::Error:
|
||||
os << ansi::RED << ansi::BOLD << "[ERROR] ";
|
||||
break;
|
||||
|
||||
// unreachable
|
||||
default: {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
Logger::reset_level() {
|
||||
os << ansi::RESET;
|
||||
}
|
||||
}
|
||||
|
||||
// Global logger
|
||||
logging::Logger logger;
|
@@ -1,42 +1,57 @@
|
||||
#pragma once
|
||||
|
||||
#include <iomanip>
|
||||
#include <fmt/ostream.h>
|
||||
#include <iostream>
|
||||
#include <source_location>
|
||||
#include <streambuf>
|
||||
|
||||
namespace logging {
|
||||
enum class Level {
|
||||
Debug,
|
||||
Info,
|
||||
Warn,
|
||||
Error,
|
||||
};
|
||||
namespace logger {
|
||||
inline std::ostream& stream = std::clog;
|
||||
|
||||
class Logger {
|
||||
public:
|
||||
Logger(std::ostream& os = std::clog);
|
||||
|
||||
template<typename... Args>
|
||||
void print(Level level, Args&&... args) {
|
||||
set_level(level);
|
||||
(os << ... << args);
|
||||
reset_level();
|
||||
os << std::endl;
|
||||
}
|
||||
|
||||
private:
|
||||
std::ostream& os;
|
||||
void set_level(Level level);
|
||||
void reset_level();
|
||||
};
|
||||
namespace ansi {
|
||||
static constexpr char RED[] = "\033[31m";
|
||||
static constexpr char YELLOW[] = "\033[33m";
|
||||
static constexpr char MAGENTA[] = "\033[35m";
|
||||
static constexpr char WHITE[] = "\033[37m";
|
||||
static constexpr char BOLD[] = "\033[1m";
|
||||
static constexpr char RESET[] = "\033[0m";
|
||||
}
|
||||
|
||||
extern logging::Logger logger;
|
||||
template<typename... Args>
|
||||
inline void
|
||||
log_raw(const fmt::format_string<Args...>& fmt, Args&&... args) {
|
||||
fmt::println(stream, fmt, std::forward<Args>(args)...);
|
||||
}
|
||||
|
||||
#define log_debug(...) logger.print(logging::Level::Debug, __VA_ARGS__)
|
||||
#define log_info(...) logger.print(logging::Level::Info, __VA_ARGS__)
|
||||
#define log_warn(...) logger.print(logging::Level::Warn, __VA_ARGS__)
|
||||
#define log_error(...) logger.print(logging::Level::Error, __VA_ARGS__)
|
||||
#define log(...) log_info(__VA_ARGS__)
|
||||
#define debug(value) log_debug(#value, " = ", value)
|
||||
template<typename... Args>
|
||||
inline void
|
||||
log_debug(const fmt::format_string<Args...>& fmt, Args&&... args) {
|
||||
fmt::print(stream, "{}{}[DEBUG] ", ansi::MAGENTA, ansi::BOLD);
|
||||
log_raw(fmt, std::forward<Args>(args)...);
|
||||
fmt::print(stream, ansi::RESET);
|
||||
}
|
||||
|
||||
template<typename... Args>
|
||||
inline void
|
||||
log_info(const fmt::format_string<Args...>& fmt, Args&&... args) {
|
||||
fmt::print(stream, "{}[INFO] ", ansi::WHITE);
|
||||
log_raw(fmt, std::forward<Args>(args)...);
|
||||
fmt::print(stream, ansi::RESET);
|
||||
}
|
||||
|
||||
template<typename... Args>
|
||||
inline void
|
||||
log_warn(const fmt::format_string<Args...>& fmt, Args&&... args) {
|
||||
fmt::print(stream, "{}[WARN] ", ansi::YELLOW);
|
||||
log_raw(fmt, std::forward<Args>(args)...);
|
||||
fmt::print(stream, ansi::RESET);
|
||||
}
|
||||
|
||||
template<typename... Args>
|
||||
inline void
|
||||
log_error(const fmt::format_string<Args...>& fmt, Args&&... args) {
|
||||
fmt::print(stream, "{}{}[ERROR] ", ansi::RED, ansi::BOLD);
|
||||
log_raw(fmt, std::forward<Args>(args)...);
|
||||
fmt::print(stream, ansi::RESET);
|
||||
}
|
||||
}
|
||||
|
||||
#define debug(value) logger::log_debug("{} = {}", #value, value)
|
||||
|
@@ -1,4 +1,3 @@
|
||||
lib_sources += files(
|
||||
'log.cc',
|
||||
'utils.cc'
|
||||
)
|
Reference in New Issue
Block a user