60 lines
1.7 KiB
C++
60 lines
1.7 KiB
C++
|
|
#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
|