diff --git a/headers/Systems/Logging.hpp b/headers/Systems/Logging.hpp index c9bf14c..099ea15 100644 --- a/headers/Systems/Logging.hpp +++ b/headers/Systems/Logging.hpp @@ -10,7 +10,7 @@ #define GUARD_TOURMALINE_LOGGING_H #include #include -#include +#include namespace Tourmaline::Systems { class Logging { @@ -25,8 +25,8 @@ public: }; static void LogToFile(std::string File = ""); - static void Log(const std::string &message, - const std::string &position = "Unknown", + static void Log(std::string_view message, + std::string_view position = "Unknown", LogLevel severity = LogLevel::Info, bool assertion = true); private: diff --git a/source/Systems/Logging.cpp b/source/Systems/Logging.cpp index 7b96132..292f91b 100644 --- a/source/Systems/Logging.cpp +++ b/source/Systems/Logging.cpp @@ -7,7 +7,7 @@ * obtain one at http://mozilla.org/MPL/2.0/. */ -#include +#include "../../headers/Systems/Logging.hpp" #include #include @@ -16,9 +16,11 @@ #include #include #include +#include #include #include #include +#include #include using namespace Tourmaline::Systems; @@ -47,13 +49,15 @@ void Logging::LogToFile(std::string File) { } } -void Logging::Log(const std::string &message, const std::string &position, +void Logging::Log(std::string_view message, std::string_view position, Logging::LogLevel severity, bool assertion) { if (assertion) [[likely]] { - auto loglevelData = + static std::string + output; // This is done to stop allocations per std::format + const auto &loglevelData = Logging::LogLevelToString[static_cast(severity)]; - std::string output = - std::format("[{}@{}] {}\n", loglevelData.first, position, message); + std::format_to(std::back_inserter(output), "[{}@{}] {}\n", + loglevelData.first, position, message); std::print("\033{} {}\033[0m", loglevelData.second, output); if (Logging::File.is_open()) { @@ -68,5 +72,7 @@ void Logging::Log(const std::string &message, const std::string &position, if (severity == Logging::LogLevel::Critical) { std::terminate(); } + + output.clear(); } }