FeatherMC/src/logging/Logger.cpp

65 lines
1.4 KiB
C++

#include "Logger.h"
#include <cstdio>
#include <cstdarg>
#ifdef _WIN32
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
#define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004
#endif
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;
}
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_networkManager;
}
}