39 lines
1015 B
C++
39 lines
1015 B
C++
#ifndef LOG_HPP
|
|
#define LOG_HPP
|
|
|
|
// #define PATTERN "[{}{}{}] "
|
|
|
|
#include <mutex>
|
|
#include <print>
|
|
#include <string_view>
|
|
|
|
enum class LOG { INF, WRN, ERR, DBG };
|
|
inline std::mutex mtx;
|
|
|
|
template <typename... Args>
|
|
inline void log(LOG level, std::string_view tag, std::format_string<Args...> str, Args&&... args) {
|
|
constexpr std::string_view reset = "\033[0m";
|
|
constexpr std::string_view green = "\033[32m";
|
|
constexpr std::string_view yellow = "\033[33m";
|
|
constexpr std::string_view red = "\033[31m";
|
|
constexpr std::string_view pattern = "[{}{}{}] ";
|
|
|
|
std::scoped_lock lock(mtx);
|
|
switch (level) {
|
|
case LOG::INF:
|
|
std::print(pattern, green, tag, reset);
|
|
break;
|
|
case LOG::WRN:
|
|
std::print(pattern, yellow, tag, reset);
|
|
break;
|
|
case LOG::ERR:
|
|
std::print(pattern, red, tag, reset);
|
|
break;
|
|
default:
|
|
std::print(pattern, "", tag, "");
|
|
}
|
|
|
|
std::println(str, std::forward<Args>(args)...);
|
|
}
|
|
|
|
#endif |