- TEST_SPEC.md: Updated test directory structure to reflect Core/Asset, Core/IO, and Resources/<Type> subdirectories - TEST_SPEC.md: Updated module names and test counts (852 total) - TEST_SPEC.md: Updated build commands for new Resources subdirectories - README.md: Updated engine structure with Core/Asset/ and Core/IO/ - README.md: Updated Resources section with layered architecture - README.md: Updated test coverage table with accurate counts
60 lines
1.8 KiB
C++
60 lines
1.8 KiB
C++
#pragma once
|
|
|
|
#include "LogLevel.h"
|
|
#include "LogCategory.h"
|
|
#include "ILogSink.h"
|
|
#include <XCEngine/Core/Containers/String.h>
|
|
#include "../Threading/Mutex.h"
|
|
|
|
#include <vector>
|
|
#include <memory>
|
|
|
|
namespace XCEngine {
|
|
namespace Debug {
|
|
|
|
class Logger {
|
|
public:
|
|
static Logger& Get();
|
|
|
|
void Initialize();
|
|
void Shutdown();
|
|
|
|
void AddSink(std::unique_ptr<ILogSink> sink);
|
|
void RemoveSink(ILogSink* sink);
|
|
|
|
void Log(LogLevel level, LogCategory category,
|
|
const Containers::String& message, const char* file = nullptr,
|
|
int32_t line = 0, const char* function = nullptr);
|
|
|
|
void Verbose(LogCategory category, const Containers::String& message);
|
|
void Debug(LogCategory category, const Containers::String& message);
|
|
void Info(LogCategory category, const Containers::String& message);
|
|
void Warning(LogCategory category, const Containers::String& message);
|
|
void Error(LogCategory category, const Containers::String& message);
|
|
void Fatal(LogCategory category, const Containers::String& message);
|
|
|
|
void SetMinimumLevel(LogLevel level);
|
|
void SetCategoryEnabled(LogCategory category, bool enabled);
|
|
|
|
private:
|
|
Logger() = default;
|
|
~Logger() = default;
|
|
|
|
std::vector<std::unique_ptr<ILogSink>> m_sinks;
|
|
LogLevel m_minimumLevel = LogLevel::Verbose;
|
|
bool m_categoryEnabled[11] = { true, true, true, true, true, true, true, true, true, true, true };
|
|
Threading::Mutex m_mutex;
|
|
bool m_initialized = false;
|
|
};
|
|
|
|
#define XE_LOG(category, level, message) \
|
|
XCEngine::Debug::Logger::Get().Log(level, category, message, __FILE__, __LINE__, __FUNCTION__)
|
|
|
|
#define XE_ASSERT(condition, message) \
|
|
if (!(condition)) { \
|
|
XCEngine::Debug::Logger::Get().Fatal(XCEngine::Debug::LogCategory::General, message); \
|
|
}
|
|
|
|
} // namespace Debug
|
|
} // namespace XCEngine
|