Update version annunciator to follow new variable.
[asdcplib.git] / src / KM_log.cpp
index 4778ffc36bcd85593ba25fbc71891ddf557c5520..3d34f1c8529af25e1083085d04498d192ca0bada 100755 (executable)
@@ -31,9 +31,12 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 #include <KM_util.h>
 #include <KM_log.h>
+#include <KM_mutex.h>
 #include <sys/types.h>
 #include <string.h>
 #include <stdarg.h>
+#include <iostream>
+#include <sstream>
 
 #ifdef KM_WIN32
 #define getpid GetCurrentProcessId
@@ -56,20 +59,24 @@ Kumu::ILogSink::vLogf(LogType_t type, const char* fmt, va_list* list)
 //------------------------------------------------------------------------------------------
 //
 
-static Kumu::ILogSink* s_DefaultLogSink;
+static Kumu::Mutex     s_DefaultLogSinkLock;
+static Kumu::ILogSink* s_DefaultLogSink = 0;
 static Kumu::StdioLogSink s_StderrLogSink;
 
 //
 void
 Kumu::SetDefaultLogSink(ILogSink* Sink)
 {
-    s_DefaultLogSink = Sink;
+  AutoMutex L(s_DefaultLogSinkLock);
+  s_DefaultLogSink = Sink;
 }
 
 // Returns the internal default sink.
 Kumu::ILogSink&
 Kumu::DefaultLogSink()
 {
+  AutoMutex L(s_DefaultLogSinkLock);
+
   if ( s_DefaultLogSink == 0 )
     s_DefaultLogSink = &s_StderrLogSink;
 
@@ -144,6 +151,24 @@ Kumu::StreamLogSink::WriteEntry(const LogEntry& Entry)
 
 //------------------------------------------------------------------------------------------
 
+//
+std::basic_ostream<char, std::char_traits<char> >&
+Kumu::operator<<(std::basic_ostream<char, std::char_traits<char> >& strm, LogEntry const& Entry)
+{
+  std::basic_ostringstream<char, std::char_traits<char> > s;
+  s.copyfmt(strm);
+  s.width(0);
+  std::string buf;
+
+  s << Entry.CreateStringWithOptions(buf, LOG_OPTION_ALL);
+
+  strm << s.str();
+  return strm;
+}
+
+//------------------------------------------------------------------------------------------
+
+
 //
 bool
 Kumu::LogEntry::TestFilter(i32_t filter) const