2025-07-05 13:28:41 +03:30
|
|
|
#pragma once
|
2025-07-06 16:30:38 +03:30
|
|
|
|
|
|
|
#include <format>
|
|
|
|
#include <memory>
|
|
|
|
#include <spdlog/sinks/basic_file_sink.h>
|
|
|
|
#include <spdlog/sinks/stdout_color_sinks.h>
|
|
|
|
#include <spdlog/spdlog.h>
|
|
|
|
|
|
|
|
/** @brief Severity of a log message.
|
|
|
|
*
|
|
|
|
* @note Values reflect spdlog::lvl
|
|
|
|
*/
|
|
|
|
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,
|
|
|
|
};
|
|
|
|
|
|
|
|
namespace spdlog {
|
|
|
|
class logger;
|
|
|
|
}
|
|
|
|
|
|
|
|
/** Responsible for logging */
|
|
|
|
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-06 16:30:38 +03:30
|
|
|
instance().spd_logger->log(
|
|
|
|
(spdlog::level::level_enum)lvl,
|
|
|
|
std::format(fmt, std::forward<Args>(args)...)
|
|
|
|
);
|
2025-07-05 13:28:41 +03:30
|
|
|
}
|
|
|
|
|
|
|
|
private:
|
2025-07-06 16:30:38 +03:30
|
|
|
Logger();
|
2025-07-05 16:07:51 +03:30
|
|
|
|
2025-07-06 16:30:38 +03:30
|
|
|
~Logger();
|
2025-07-05 16:07:51 +03:30
|
|
|
|
2025-07-06 16:30:38 +03:30
|
|
|
auto static instance() -> Logger &;
|
2025-07-05 16:07:51 +03:30
|
|
|
|
2025-07-06 16:30:38 +03:30
|
|
|
std::shared_ptr<spdlog::logger> spd_logger;
|
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)...);
|
|
|
|
}
|