|
@@ -195,12 +195,17 @@ template <typename F> int wrap(F func) {
|
|
return RTC_ERR_SUCCESS; \
|
|
return RTC_ERR_SUCCESS; \
|
|
})
|
|
})
|
|
|
|
|
|
-class plog_appender : public plog::IAppender {
|
|
|
|
|
|
+class plogAppender : public plog::IAppender {
|
|
public:
|
|
public:
|
|
- plog_appender(rtcLogCallbackFunc cb = nullptr) { set_callback(cb); }
|
|
|
|
|
|
+ plogAppender(rtcLogCallbackFunc cb = nullptr) { setCallback(cb); }
|
|
|
|
|
|
- void set_callback(rtcLogCallbackFunc cb) {
|
|
|
|
- std::lock_guard lock(mutex);
|
|
|
|
|
|
+ plogAppender(plogAppender &&appender) : callback(nullptr) {
|
|
|
|
+ std::lock_guard lock(appender.callbackMutex);
|
|
|
|
+ std::swap(appender.callback, callback);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ void setCallback(rtcLogCallbackFunc cb) {
|
|
|
|
+ std::lock_guard lock(callbackMutex);
|
|
callback = cb;
|
|
callback = cb;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -215,7 +220,7 @@ public:
|
|
#else
|
|
#else
|
|
std::string str = formatted;
|
|
std::string str = formatted;
|
|
#endif
|
|
#endif
|
|
- std::lock_guard lock(mutex);
|
|
|
|
|
|
+ std::lock_guard lock(callbackMutex);
|
|
if (callback)
|
|
if (callback)
|
|
callback(static_cast<rtcLogLevel>(record.getSeverity()), str.c_str());
|
|
callback(static_cast<rtcLogLevel>(record.getSeverity()), str.c_str());
|
|
else
|
|
else
|
|
@@ -224,18 +229,24 @@ public:
|
|
|
|
|
|
private:
|
|
private:
|
|
rtcLogCallbackFunc callback;
|
|
rtcLogCallbackFunc callback;
|
|
|
|
+ std::mutex callbackMutex;
|
|
};
|
|
};
|
|
|
|
|
|
} // namespace
|
|
} // namespace
|
|
|
|
|
|
void rtcInitLogger(rtcLogLevel level, rtcLogCallbackFunc cb) {
|
|
void rtcInitLogger(rtcLogLevel level, rtcLogCallbackFunc cb) {
|
|
- static std::optional<plog_appender> appender;
|
|
|
|
- if (appender)
|
|
|
|
- appender->set_callback(cb);
|
|
|
|
- else if (cb)
|
|
|
|
- appender.emplace(plog_appender(cb));
|
|
|
|
-
|
|
|
|
- InitLogger(static_cast<plog::Severity>(level), appender ? &appender.value() : nullptr);
|
|
|
|
|
|
+ static std::optional<plogAppender> appender;
|
|
|
|
+ const auto severity = static_cast<plog::Severity>(level);
|
|
|
|
+ std::lock_guard lock(mutex);
|
|
|
|
+ if (appender) {
|
|
|
|
+ appender->setCallback(cb);
|
|
|
|
+ InitLogger(severity, nullptr); // change the severity
|
|
|
|
+ } else if (cb) {
|
|
|
|
+ appender.emplace(plogAppender(cb));
|
|
|
|
+ InitLogger(severity, &appender.value());
|
|
|
|
+ } else {
|
|
|
|
+ InitLogger(severity, nullptr); // log to stdout
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
void rtcSetUserPointer(int i, void *ptr) { setUserPointer(i, ptr); }
|
|
void rtcSetUserPointer(int i, void *ptr) { setUserPointer(i, ptr); }
|