#include "Debug/ConsoleLogSink.h" #ifdef _WIN32 #include #endif namespace XCEngine { namespace Debug { ConsoleLogSink::ConsoleLogSink() = default; ConsoleLogSink::~ConsoleLogSink() = default; void ConsoleLogSink::Log(const LogEntry& entry) { if (entry.level < m_minimumLevel) { return; } #ifdef _WIN32 if (m_colorOutput) { HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); switch (entry.level) { case LogLevel::Verbose: SetConsoleTextAttribute(hConsole, FOREGROUND_INTENSITY); break; case LogLevel::Debug: SetConsoleTextAttribute(hConsole, FOREGROUND_BLUE | FOREGROUND_GREEN); break; case LogLevel::Info: SetConsoleTextAttribute(hConsole, FOREGROUND_GREEN); break; case LogLevel::Warning: SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_GREEN); break; case LogLevel::Error: SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_INTENSITY); break; case LogLevel::Fatal: SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY); break; } } #endif printf("[%s] [%s] %s\n", LogLevelToString(entry.level), LogCategoryToString(entry.category), entry.message.CStr()); #ifdef _WIN32 if (m_colorOutput) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE); } #endif } void ConsoleLogSink::Flush() { fflush(stdout); } void ConsoleLogSink::SetColorOutput(bool enable) { m_colorOutput = enable; } void ConsoleLogSink::SetMinimumLevel(LogLevel level) { m_minimumLevel = level; } } // namespace Debug } // namespace XCEngine