#include "Logger.h" #include #include #ifdef _WIN32 #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif #include #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 s_logger = nullptr; if (s_logger == nullptr) s_logger = std::make_unique(); 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; } }