diff --git a/lib/log/GWLog.cpp b/lib/log/GWLog.cpp index c002fe9..d7ff12a 100644 --- a/lib/log/GWLog.cpp +++ b/lib/log/GWLog.cpp @@ -12,27 +12,37 @@ GwLog::GwLog(int level, GwLogWriter *writer){ logLevel=level; if (writer == NULL) writer=new DefaultLogWriter(); this->writer=writer; + locker = xSemaphoreCreateMutex(); +} +GwLog::~GwLog(){ + vSemaphoreDelete(locker); } void GwLog::logString(const char *fmt,...){ - if (! writer) return; va_list args; va_start(args,fmt); + xSemaphoreTake(locker, portMAX_DELAY); vsnprintf(buffer,99,fmt,args); + if (! writer) return; writer->write(prefix.c_str()); writer->write(buffer); writer->write("\n"); + xSemaphoreGive(locker); } void GwLog::logDebug(int level,const char *fmt,...){ if (level > logLevel) return; - if (! writer) return; va_list args; va_start(args,fmt); + xSemaphoreTake(locker, portMAX_DELAY); vsnprintf(buffer,99,fmt,args); + if (! writer) return; writer->write(prefix.c_str()); writer->write(buffer); writer->write("\n"); + xSemaphoreGive(locker); } void GwLog::setWriter(GwLogWriter *writer){ + xSemaphoreTake(locker, portMAX_DELAY); if (this->writer) delete this->writer; this->writer=writer; + xSemaphoreGive(locker); } diff --git a/lib/log/GwLog.h b/lib/log/GwLog.h index 1433aa0..205b503 100644 --- a/lib/log/GwLog.h +++ b/lib/log/GwLog.h @@ -12,6 +12,7 @@ class GwLog{ char buffer[100]; int logLevel=1; GwLogWriter *writer; + SemaphoreHandle_t locker; public: static const int LOG=1; static const int ERROR=0; @@ -19,6 +20,7 @@ class GwLog{ static const int TRACE=2; String prefix="LOG:"; GwLog(int level=LOG, GwLogWriter *writer=NULL); + ~GwLog(); void setWriter(GwLogWriter *writer); void logString(const char *fmt,...); void logDebug(int level, const char *fmt,...);