8namespace magpie::logger {
18inline void defaultHandler(Level level,
const std::string_view& message) {
21 printf(
"DEBUG %.*s\n",
static_cast<int>(message.length()), message.data());
24 printf(
"INFO %.*s\n",
static_cast<int>(message.length()), message.data());
27 printf(
"WARNING %.*s\n",
static_cast<int>(message.length()), message.data());
30 printf(
"ERROR %.*s\n",
static_cast<int>(message.length()), message.data());
33 printf(
"CRITICAL %.*s\n",
static_cast<int>(message.length()), message.data());
39 std::function<void(logger::Level,
const std::string_view&)> logger = logger::defaultHandler;
47template <Level level,
class... Args>
48inline void log(
const std::format_string<Args...>& fmt, Args&&... args) {
50 auto& logger = config().logger;
55 level, std::format(fmt, std::forward<Args>(args)...)
59template <
class... Args>
60inline void debug(
const std::format_string<Args...>& format, Args&&... args) {
61 log<Level::debug, Args...>(format, std::forward<Args>(args)...);
64template <
class... Args>
65inline void info(
const std::format_string<Args...>& format, Args&&... args) {
66 log<Level::info, Args...>(format, std::forward<Args>(args)...);
69template <
class... Args>
70inline void warn(
const std::format_string<Args...>& format, Args&&... args) {
71 log<Level::warning, Args...>(format, std::forward<Args>(args)...);
74template <
class... Args>
75inline void error(
const std::format_string<Args...>& format, Args&&... args) {
76 log<Level::error, Args...>(format, std::forward<Args>(args)...);
79template <
class... Args>
80inline void critical(
const std::format_string<Args...>& format, Args&&... args) {
81 log<Level::critical, Args...>(format, std::forward<Args>(args)...);