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
|
|
|
#include "Debug/FileLogSink.h"
|
|
|
|
|
#include <ctime>
|
|
|
|
|
|
|
|
|
|
namespace XCEngine {
|
|
|
|
|
namespace Debug {
|
|
|
|
|
|
|
|
|
|
FileLogSink::FileLogSink(const Containers::String& filePath)
|
|
|
|
|
: m_filePath(filePath) {
|
|
|
|
|
m_writer.Open(filePath.CStr(), true);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
FileLogSink::~FileLogSink() {
|
|
|
|
|
m_writer.Close();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void FileLogSink::Log(const LogEntry& entry) {
|
|
|
|
|
if (!m_writer.IsOpen()) {
|
2026-03-15 14:55:23 +08:00
|
|
|
// File not open, try to reopen
|
|
|
|
|
m_writer.Open(m_filePath.CStr(), true);
|
|
|
|
|
if (!m_writer.IsOpen()) {
|
|
|
|
|
// Still not open - output to debug
|
|
|
|
|
return;
|
|
|
|
|
}
|
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
|
|
|
}
|
|
|
|
|
|
|
|
|
|
char timestamp[32];
|
|
|
|
|
std::time_t time = static_cast<std::time_t>(entry.timestamp);
|
|
|
|
|
std::strftime(timestamp, sizeof(timestamp), "%Y-%m-%d %H:%M:%S", std::localtime(&time));
|
|
|
|
|
|
|
|
|
|
char buffer[1024];
|
|
|
|
|
std::snprintf(buffer, sizeof(buffer), "[%s] [%s] [%s] %s\n",
|
|
|
|
|
timestamp,
|
|
|
|
|
LogLevelToString(entry.level),
|
|
|
|
|
LogCategoryToString(entry.category),
|
|
|
|
|
entry.message.CStr());
|
|
|
|
|
|
|
|
|
|
m_writer.Write(buffer, std::strlen(buffer));
|
2026-03-15 14:25:36 +08:00
|
|
|
m_writer.Flush();
|
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
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void FileLogSink::Flush() {
|
|
|
|
|
m_writer.Flush();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
} // namespace Debug
|
|
|
|
|
} // namespace XCEngine
|