69 lines
1.5 KiB
C++
69 lines
1.5 KiB
C++
#include "Logger.h"
|
|
|
|
#include <cstdio>
|
|
#include <cstdarg>
|
|
|
|
// Instead of defining FMT_HEADER_ONLY or building fmtlib
|
|
// we can just include all implementation code in Logger.cpp
|
|
#include "fmt/src/format.cc"
|
|
|
|
namespace Feather::Log
|
|
{
|
|
namespace Channels
|
|
{
|
|
ChannelID General = Logger::Instance().RegisterChannel("General");
|
|
}
|
|
|
|
ChannelID Logger::RegisterChannel(const char* name)
|
|
{
|
|
size_t id = m_channels.size();
|
|
m_channels.emplace_back(name);
|
|
return id;
|
|
}
|
|
|
|
Logger& Logger::Instance()
|
|
{
|
|
static std::unique_ptr<Logger> s_logger = nullptr;
|
|
if (s_logger == nullptr)
|
|
s_logger = std::make_unique<Logger>();
|
|
|
|
return *s_logger;
|
|
}
|
|
}
|
|
|
|
#ifdef _WIN32
|
|
|
|
#ifndef WIN32_LEAN_AND_MEAN
|
|
#define WIN32_LEAN_AND_MEAN
|
|
#endif
|
|
|
|
#include <windows.h>
|
|
#define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004
|
|
|
|
#endif
|
|
|
|
namespace
|
|
{
|
|
class LoggingManager
|
|
{
|
|
public:
|
|
LoggingManager()
|
|
{
|
|
#ifdef _WIN32
|
|
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
|
|
if (handle != INVALID_HANDLE_VALUE)
|
|
{
|
|
DWORD mode = 0;
|
|
if (GetConsoleMode(handle, &mode))
|
|
{
|
|
// To enable ANSI escape sequences on Windows 10 we need to set this flag
|
|
mode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;
|
|
SetConsoleMode(handle, mode);
|
|
}
|
|
}
|
|
#endif
|
|
}
|
|
};
|
|
|
|
static LoggingManager s_loggingManager;
|
|
} |