light/modules/logger/public/logger.hpp

90 lines
1.8 KiB
C++
Raw Normal View History

2025-07-05 13:28:41 +03:30
#pragma once
2025-07-06 16:30:38 +03:30
#include <format>
2025-07-16 13:56:59 +03:30
#include <print>
/** Severity of a log message. */
2025-07-06 16:30:38 +03:30
enum class LogLvl : uint8_t
2025-07-05 13:28:41 +03:30
{
2025-07-06 16:30:38 +03:30
/** Lowest and most vebose log level, for tracing execution paths and events */
trace = 0,
2025-07-05 13:28:41 +03:30
2025-07-06 16:30:38 +03:30
/** Vebose log level, for enabling temporarily to debug */
debug = 1,
/** General information */
info = 2,
/** Things we should to be aware of and edge cases */
warn = 3,
/** Defects, bugs and undesired behaviour */
error = 4,
/** Unrecoverable errors */
critical = 5,
/** No logging */
off = 6,
};
2025-07-16 13:56:59 +03:30
/** Simple console logger */
2025-07-06 16:30:38 +03:30
class Logger
{
public:
void static show_imgui_window();
2025-07-06 14:02:50 +03:30
2025-07-06 16:30:38 +03:30
template<typename... Args>
void static log(LogLvl lvl, std::format_string<Args...> fmt, Args &&...args)
2025-07-05 13:28:41 +03:30
{
2025-07-16 13:56:59 +03:30
std::ignore = lvl;
std::println(fmt, std::forward<Args>(args)...);
2025-07-05 13:28:41 +03:30
}
void static log(LogLvl lvl, const char *message)
{
2025-07-16 13:56:59 +03:30
std::ignore = lvl;
std::println("{}", message);
}
2025-07-05 13:28:41 +03:30
private:
2025-07-16 13:56:59 +03:30
Logger() = default;
2025-07-05 13:28:41 +03:30
};
2025-07-06 16:30:38 +03:30
template<typename... Args>
void log_trc(std::format_string<Args...> fmt, Args &&...args)
{
Logger::log(LogLvl::trace, fmt, std::forward<Args>(args)...);
}
2025-07-05 13:28:41 +03:30
2025-07-06 16:30:38 +03:30
template<typename... Args>
void log_dbg(std::format_string<Args...> fmt, Args &&...args)
{
Logger::log(LogLvl::debug, fmt, std::forward<Args>(args)...);
}
template<typename... Args>
void log_inf(std::format_string<Args...> fmt, Args &&...args)
{
Logger::log(LogLvl::info, fmt, std::forward<Args>(args)...);
}
template<typename... Args>
void log_wrn(std::format_string<Args...> fmt, Args &&...args)
{
Logger::log(LogLvl::warn, fmt, std::forward<Args>(args)...);
}
template<typename... Args>
void log_err(std::format_string<Args...> fmt, Args &&...args)
{
Logger::log(LogLvl::error, fmt, std::forward<Args>(args)...);
}
template<typename... Args>
void log_crt(std::format_string<Args...> fmt, Args &&...args)
{
Logger::log(LogLvl::critical, fmt, std::forward<Args>(args)...);
}