Files
XCEngine/engine/src/Debug/ConsoleLogSink.cpp

60 lines
1.7 KiB
C++
Raw Normal View History

#include "Debug/ConsoleLogSink.h"
#ifdef _WIN32
#include <windows.h>
#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