summaryrefslogtreecommitdiff
path: root/src/mbgl/util/logging.cpp
diff options
context:
space:
mode:
authorKonstantin Käfer <mail@kkaefer.com>2016-11-22 15:43:19 +0100
committerKonstantin Käfer <mail@kkaefer.com>2016-11-22 20:58:51 +0100
commite76de0540284118845c93c4351c82c6c8d5a090a (patch)
treedc295f87b74c5a4766444f6d1e7020e6219017a8 /src/mbgl/util/logging.cpp
parent117863f1114551407c481abc752f5fcfd139c878 (diff)
downloadqtlocation-mapboxgl-e76de0540284118845c93c4351c82c6c8d5a090a.tar.gz
[build] move logging to util
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