Files
XCEngine/engine/src/Debug/ConsoleLogSink.cpp
ssdfasd 83fd517974 feat: 实现日志与调试系统(Debug模块)
- LogLevel: 日志级别枚举 (Verbose, Debug, Info, Warning, Error, Fatal)
- LogCategory: 日志分类 (General, Rendering, Physics, Memory, Threading等)
- ILogSink: 日志输出接口
- ConsoleLogSink: 控制台输出, 支持Windows颜色
- FileLogSink: 文件日志输出
- FileWriter: 文件写入器
- Logger: 日志管理器, 支持多sink, 分类控制
- Profiler: 性能分析器
- 单元测试覆盖
2026-03-13 20:53:57 +08:00

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