From e23f469e5afdc6999a80ce5a4a4d4a5beb3c95b2 Mon Sep 17 00:00:00 2001 From: ssdfasd <2156608475@qq.com> Date: Sun, 5 Apr 2026 03:34:25 +0800 Subject: [PATCH] debug: use source_location for native logger --- engine/include/XCEngine/Debug/Logger.h | 40 ++++++++++--- .../include/XCEngine/Threading/TaskSystem.h | 2 + engine/src/Debug/Logger.cpp | 56 +++++++++++++++---- 3 files changed, 77 insertions(+), 21 deletions(-) diff --git a/engine/include/XCEngine/Debug/Logger.h b/engine/include/XCEngine/Debug/Logger.h index c87e43a0..699e7ba7 100644 --- a/engine/include/XCEngine/Debug/Logger.h +++ b/engine/include/XCEngine/Debug/Logger.h @@ -6,8 +6,9 @@ #include #include "../Threading/Mutex.h" -#include #include +#include +#include namespace XCEngine { namespace Debug { @@ -23,15 +24,36 @@ public: void RemoveSink(ILogSink* sink); void Log(LogLevel level, LogCategory category, - const Containers::String& message, const char* file = nullptr, + const Containers::String& message, + const std::source_location& location = std::source_location::current()); + void Log(LogLevel level, LogCategory category, + const Containers::String& message, const char* file, 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 Verbose( + LogCategory category, + const Containers::String& message, + const std::source_location& location = std::source_location::current()); + void Debug( + LogCategory category, + const Containers::String& message, + const std::source_location& location = std::source_location::current()); + void Info( + LogCategory category, + const Containers::String& message, + const std::source_location& location = std::source_location::current()); + void Warning( + LogCategory category, + const Containers::String& message, + const std::source_location& location = std::source_location::current()); + void Error( + LogCategory category, + const Containers::String& message, + const std::source_location& location = std::source_location::current()); + void Fatal( + LogCategory category, + const Containers::String& message, + const std::source_location& location = std::source_location::current()); void SetMinimumLevel(LogLevel level); void SetCategoryEnabled(LogCategory category, bool enabled); @@ -48,7 +70,7 @@ private: }; #define XE_LOG(category, level, message) \ - XCEngine::Debug::Logger::Get().Log(level, category, message, __FILE__, __LINE__, __FUNCTION__) + XCEngine::Debug::Logger::Get().Log(level, category, message) #define XE_ASSERT(condition, message) \ if (!(condition)) { \ diff --git a/engine/include/XCEngine/Threading/TaskSystem.h b/engine/include/XCEngine/Threading/TaskSystem.h index 40cc9c2e..aae55400 100644 --- a/engine/include/XCEngine/Threading/TaskSystem.h +++ b/engine/include/XCEngine/Threading/TaskSystem.h @@ -2,9 +2,11 @@ #include "TaskSystemConfig.h" #include "Task.h" +#include "LambdaTask.h" #include "TaskGroup.h" #include "Mutex.h" #include "SpinLock.h" +#include #include #include #include diff --git a/engine/src/Debug/Logger.cpp b/engine/src/Debug/Logger.cpp index 9f21eb3c..4fa46bf1 100644 --- a/engine/src/Debug/Logger.cpp +++ b/engine/src/Debug/Logger.cpp @@ -1,6 +1,8 @@ #include "Debug/Logger.h" #include "Debug/ConsoleLogSink.h" #include +#include +#include namespace XCEngine { namespace Debug { @@ -40,6 +42,18 @@ void Logger::RemoveSink(ILogSink* sink) { } } +void Logger::Log(LogLevel level, LogCategory category, + const Containers::String& message, + const std::source_location& location) { + Log( + level, + category, + message, + location.file_name(), + static_cast(location.line()), + location.function_name()); +} + void Logger::Log(LogLevel level, LogCategory category, const Containers::String& message, const char* file, int32_t line, const char* function) { @@ -73,28 +87,46 @@ void Logger::Log(LogLevel level, LogCategory category, } } -void Logger::Verbose(LogCategory category, const Containers::String& message) { - Log(LogLevel::Verbose, category, message); +void Logger::Verbose( + LogCategory category, + const Containers::String& message, + const std::source_location& location) { + Log(LogLevel::Verbose, category, message, location); } -void Logger::Debug(LogCategory category, const Containers::String& message) { - Log(LogLevel::Debug, category, message); +void Logger::Debug( + LogCategory category, + const Containers::String& message, + const std::source_location& location) { + Log(LogLevel::Debug, category, message, location); } -void Logger::Info(LogCategory category, const Containers::String& message) { - Log(LogLevel::Info, category, message); +void Logger::Info( + LogCategory category, + const Containers::String& message, + const std::source_location& location) { + Log(LogLevel::Info, category, message, location); } -void Logger::Warning(LogCategory category, const Containers::String& message) { - Log(LogLevel::Warning, category, message); +void Logger::Warning( + LogCategory category, + const Containers::String& message, + const std::source_location& location) { + Log(LogLevel::Warning, category, message, location); } -void Logger::Error(LogCategory category, const Containers::String& message) { - Log(LogLevel::Error, category, message); +void Logger::Error( + LogCategory category, + const Containers::String& message, + const std::source_location& location) { + Log(LogLevel::Error, category, message, location); } -void Logger::Fatal(LogCategory category, const Containers::String& message) { - Log(LogLevel::Fatal, category, message); +void Logger::Fatal( + LogCategory category, + const Containers::String& message, + const std::source_location& location) { + Log(LogLevel::Fatal, category, message, location); } void Logger::SetMinimumLevel(LogLevel level) {