Files
anm2ed/src/log.h

63 lines
1.5 KiB
C++

#pragma once
#include <filesystem>
#include <fstream>
#include <string>
#include <string_view>
namespace anm2ed
{
#if defined(INFO)
#undef INFO
#endif
#if defined(WARNING)
#undef WARNING
#endif
#if defined(ERROR)
#undef ERROR
#endif
#if defined(FATAL)
#undef FATAL
#endif
#define LEVELS \
X(INFO, "[INFO]") \
X(WARNING, "[WARNING]") \
X(ERROR, "[ERROR]") \
X(FATAL, "[FATAL]") \
X(COMMAND, "[COMMAND]")
enum Level
{
#define X(symbol, string) symbol,
LEVELS
#undef X
};
constexpr std::string_view LEVEL_STRINGS[] = {
#define X(symbol, string) string,
LEVELS
#undef X
};
#undef LEVELS
class Logger
{
std::ofstream file{};
public:
void write(const Level, const std::string&);
void info(const std::string&);
void warning(const std::string&);
void error(const std::string&);
void fatal(const std::string&);
void command(const std::string&);
void open(const std::filesystem::path&);
Logger();
~Logger();
};
}
extern anm2ed::Logger logger;