diff --git a/src/kiwano/utils/Logger.cpp b/src/kiwano/utils/Logger.cpp index b00fba8b..bd5f32c7 100644 --- a/src/kiwano/utils/Logger.cpp +++ b/src/kiwano/utils/Logger.cpp @@ -85,7 +85,7 @@ void LogProvider::Init() {} void LogProvider::Flush() {} -void LogProvider::Write(LogLevel level, LogBuffer* msg) +void LogProvider::Write(LogLevel level, const char* msg) { if (level < level_) return; @@ -209,7 +209,7 @@ void ConsoleLogProvider::Init() { } -void ConsoleLogProvider::WriteMessage(LogLevel level, LogBuffer* msg) +void ConsoleLogProvider::WriteMessage(LogLevel level, const char* msg) { if (level != LogLevel::Error) std::cout << GetColor(level) << msg << std::flush << ConsoleColorBrush<-1>; @@ -217,7 +217,7 @@ void ConsoleLogProvider::WriteMessage(LogLevel level, LogBuffer* msg) std::cerr << GetColor(level) << msg << ConsoleColorBrush<-1>; #if defined(KGE_PLATFORM_WINDOWS) - ::OutputDebugStringA(msg->GetRaw()); + ::OutputDebugStringA(msg); #endif } @@ -260,7 +260,7 @@ FileLogProvider::~FileLogProvider() void FileLogProvider::Init() {} -void FileLogProvider::WriteMessage(LogLevel level, LogBuffer* msg) +void FileLogProvider::WriteMessage(LogLevel level, const char* msg) { if (ofs_) { @@ -509,8 +509,6 @@ Logger::Logger() std::iostream& Logger::GetFormatedStream(LogLevel level, LogBuffer* buffer) { - std::lock_guard lock(mutex_); - // reset buffer buffer->Reset(); @@ -536,6 +534,8 @@ void Logger::Logf(LogLevel level, const char* format, ...) if (level < level_) return; + std::lock_guard lock(mutex_); + va_list args = nullptr; va_start(args, format); @@ -586,8 +586,6 @@ void Logger::ResizeBuffer(size_t buffer_size) void Logger::WriteToProviders(LogLevel level, LogBuffer* buffer) { - std::lock_guard lock(mutex_); - // format footer if (formater_) { @@ -598,7 +596,7 @@ void Logger::WriteToProviders(LogLevel level, LogBuffer* buffer) for (auto provider : providers_) { buffer->pubseekpos(0, std::ios_base::in); - provider->Write(level, buffer); + provider->Write(level, buffer->GetRaw()); } } diff --git a/src/kiwano/utils/Logger.h b/src/kiwano/utils/Logger.h index bd160454..8193b0f4 100644 --- a/src/kiwano/utils/Logger.h +++ b/src/kiwano/utils/Logger.h @@ -155,14 +155,14 @@ public: virtual void Flush(); - void Write(LogLevel level, LogBuffer* msg); + void Write(LogLevel level, const char* msg); void SetLevel(LogLevel level); protected: LogProvider(); - virtual void WriteMessage(LogLevel level, LogBuffer* msg) = 0; + virtual void WriteMessage(LogLevel level, const char* msg) = 0; protected: LogLevel level_; @@ -184,7 +184,7 @@ public: void Flush() override; protected: - void WriteMessage(LogLevel level, LogBuffer* msg) override; + void WriteMessage(LogLevel level, const char* msg) override; private: typedef std::ostream&(*ConsoleColor)(std::ostream&); @@ -208,7 +208,7 @@ public: void Flush() override; protected: - void WriteMessage(LogLevel level, LogBuffer* msg) override; + void WriteMessage(LogLevel level, const char* msg) override; private: std::ofstream ofs_; @@ -319,6 +319,8 @@ inline void Logger::Log(LogLevel level, _Args&&... args) if (level < level_) return; + std::lock_guard lock(mutex_); + // build message auto& stream = this->GetFormatedStream(level, &this->buffer_); (void)std::initializer_list{ ((stream << ' ' << args), 0)... };