summaryrefslogtreecommitdiff
path: root/src/mbgl/util/logging.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/util/logging.cpp')
-rw-r--r--src/mbgl/util/logging.cpp67
1 files changed, 67 insertions, 0 deletions
diff --git a/src/mbgl/util/logging.cpp b/src/mbgl/util/logging.cpp
new file mode 100644
index 0000000000..939f1def64
--- /dev/null
+++ b/src/mbgl/util/logging.cpp
@@ -0,0 +1,67 @@
+#include <mbgl/util/logging.hpp>
+#include <mbgl/util/enum.hpp>
+#include <mbgl/util/thread.hpp>
+
+#include <cstdio>
+#include <cstdarg>
+#include <sstream>
+
+namespace mbgl {
+
+namespace {
+
+static std::unique_ptr<Log::Observer> currentObserver;
+
+} // namespace
+
+void Log::setObserver(std::unique_ptr<Observer> observer) {
+ currentObserver = std::move(observer);
+}
+
+std::unique_ptr<Log::Observer> Log::removeObserver() {
+ std::unique_ptr<Observer> observer;
+ std::swap(observer, currentObserver);
+ return observer;
+}
+
+void Log::record(EventSeverity severity, Event event, const std::string &msg) {
+ record(severity, event, -1, msg);
+}
+
+void Log::record(EventSeverity severity, Event event, const char* format, ...) {
+ va_list args;
+ va_start(args, format);
+ char msg[4096];
+ vsnprintf(msg, sizeof(msg), format, args);
+ va_end(args);
+
+ record(severity, event, -1, msg);
+}
+
+void Log::record(EventSeverity severity, Event event, int64_t code) {
+ record(severity, event, code, std::string());
+}
+
+void Log::record(EventSeverity severity, Event event, int64_t code, const std::string &msg) {
+ if (currentObserver && severity != EventSeverity::Debug &&
+ currentObserver->onRecord(severity, event, code, msg)) {
+ return;
+ }
+
+ std::stringstream logStream;
+
+ logStream << "{" << platform::getCurrentThreadName() << "}";
+ logStream << "[" << Enum<Event>::toString(event) << "]";
+
+ if (code >= 0) {
+ logStream << "(" << code << ")";
+ }
+
+ if (!msg.empty()) {
+ logStream << ": " << msg;
+ }
+
+ platformRecord(severity, logStream.str());
+}
+
+} // namespace mbgl