Browse Source

Fixed rtcInitLogger to prevent logging multiple times

Paul-Louis Ageneau 4 years ago
parent
commit
552e443ef1
2 changed files with 10 additions and 5 deletions
  1. 2 1
      include/rtc/rtc.h
  2. 8 4
      src/capi.cpp

+ 2 - 1
include/rtc/rtc.h

@@ -96,7 +96,8 @@ typedef void (*rtcBufferedAmountLowCallbackFunc)(void *ptr);
 typedef void (*rtcAvailableCallbackFunc)(void *ptr);
 
 // Log
-RTC_EXPORT void rtcInitLogger(rtcLogLevel level, rtcLogCallbackFunc cb); // NULL cb to log to stdout
+// NULL cb on the first call will log to stdout
+RTC_EXPORT void rtcInitLogger(rtcLogLevel level, rtcLogCallbackFunc cb);
 
 // User pointer
 RTC_EXPORT void rtcSetUserPointer(int id, void *ptr);

+ 8 - 4
src/capi.cpp

@@ -230,12 +230,16 @@ private:
 
 void rtcInitLogger(rtcLogLevel level, rtcLogCallbackFunc cb) {
 	static std::optional<plog_appender> appender;
-	if (appender)
+	auto severity = static_cast<plog::Severity>(level);
+	if (appender) {
 		appender->set_callback(cb);
-	else if (cb)
+		InitLogger(severity, nullptr); // change the severity
+	} else if (cb) {
 		appender.emplace(plog_appender(cb));
-
-	InitLogger(static_cast<plog::Severity>(level), appender ? &appender.value() : nullptr);
+		InitLogger(severity, &appender.value());
+	} else {
+		InitLogger(severity, nullptr); // log to stdout
+	}
 }
 
 void rtcSetUserPointer(int i, void *ptr) { setUserPointer(i, ptr); }