feat: 实现日志与调试系统(Debug模块)
- LogLevel: 日志级别枚举 (Verbose, Debug, Info, Warning, Error, Fatal) - LogCategory: 日志分类 (General, Rendering, Physics, Memory, Threading等) - ILogSink: 日志输出接口 - ConsoleLogSink: 控制台输出, 支持Windows颜色 - FileLogSink: 文件日志输出 - FileWriter: 文件写入器 - Logger: 日志管理器, 支持多sink, 分类控制 - Profiler: 性能分析器 - 单元测试覆盖
This commit is contained in:
59
engine/src/Debug/ConsoleLogSink.cpp
Normal file
59
engine/src/Debug/ConsoleLogSink.cpp
Normal file
@@ -0,0 +1,59 @@
|
||||
#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
|
||||
Reference in New Issue
Block a user