diff options
Diffstat (limited to 'src/mbgl/util/logging.cpp')
-rw-r--r-- | src/mbgl/util/logging.cpp | 67 |
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 |