From 2948e7d121343359b817d2fb0eb383e257ab84c8 Mon Sep 17 00:00:00 2001 From: "Thiago Marcos P. Santos" Date: Mon, 9 Mar 2015 15:42:11 +0200 Subject: [PATCH] Simplify the logging mechanism Move the implementation of the more specialized methods to the base class and let the platform implement only the most generic method that takes all the possible arguments. These specialized methods will then map to the generic implementation that must be provided by the platforms we support. --- include/mbgl/platform/darwin/log_nslog.hpp | 3 --- include/mbgl/platform/default/log_stderr.hpp | 5 +--- include/mbgl/platform/log.hpp | 8 +++--- platform/android/log_android.cpp | 26 -------------------- platform/darwin/log_nslog.mm | 26 -------------------- platform/default/log_stderr.cpp | 19 -------------- src/mbgl/platform/log.cpp | 20 +++++++++++++++ 7 files changed, 26 insertions(+), 81 deletions(-) diff --git a/include/mbgl/platform/darwin/log_nslog.hpp b/include/mbgl/platform/darwin/log_nslog.hpp index d40f96303..5b2ed0411 100644 --- a/include/mbgl/platform/darwin/log_nslog.hpp +++ b/include/mbgl/platform/darwin/log_nslog.hpp @@ -9,9 +9,6 @@ class NSLogBackend : public LogBackend { public: inline ~NSLogBackend() = default; - void record(EventSeverity severity, Event event, const std::string &msg); - void record(EventSeverity severity, Event event, const char* format, ...); - void record(EventSeverity severity, Event event, int64_t code); void record(EventSeverity severity, Event event, int64_t code, const std::string &msg); }; diff --git a/include/mbgl/platform/default/log_stderr.hpp b/include/mbgl/platform/default/log_stderr.hpp index 45f76f0d1..e07357593 100644 --- a/include/mbgl/platform/default/log_stderr.hpp +++ b/include/mbgl/platform/default/log_stderr.hpp @@ -9,10 +9,7 @@ class StderrLogBackend : public LogBackend { public: inline ~StderrLogBackend() = default; - void record(EventSeverity severity, Event event, const std::string &msg); - void record(EventSeverity severity, Event event, const char* format, ...); - void record(EventSeverity severity, Event event, int64_t code); - void record(EventSeverity severity, Event event, int64_t code, const std::string &msg); + void record(EventSeverity severity, Event event, int64_t code, const std::string &msg) override; }; diff --git a/include/mbgl/platform/log.hpp b/include/mbgl/platform/log.hpp index 8b58921bb..e5431a07c 100644 --- a/include/mbgl/platform/log.hpp +++ b/include/mbgl/platform/log.hpp @@ -13,9 +13,11 @@ namespace mbgl { class LogBackend { public: virtual inline ~LogBackend() = default; - virtual void record(EventSeverity severity, Event event, const std::string &msg) = 0; - virtual void record(EventSeverity severity, Event event, const char* format, ...) = 0; - virtual void record(EventSeverity severity, Event event, int64_t code) = 0; + + void record(EventSeverity severity, Event event, const std::string &msg); + void record(EventSeverity severity, Event event, const char* format, ...); + void record(EventSeverity severity, Event event, int64_t code); + virtual void record(EventSeverity severity, Event event, int64_t code, const std::string &msg) = 0; }; diff --git a/platform/android/log_android.cpp b/platform/android/log_android.cpp index 5e40ce33b..e1bec3e0c 100644 --- a/platform/android/log_android.cpp +++ b/platform/android/log_android.cpp @@ -1,7 +1,5 @@ #include -#include -#include #define __STDC_FORMAT_MACROS // NDK bug workaround: https://code.google.com/p/android/issues/detail?id=72349 #include @@ -28,30 +26,6 @@ int AndroidLogBackend::severityToPriority(EventSeverity severity) { } } -void AndroidLogBackend::record(EventSeverity severity, Event event, const std::string &msg) { - __android_log_print(severityToPriority(severity), EventClass(event).c_str(), "%s", msg.c_str()); -} - -void AndroidLogBackend::record(EventSeverity severity, Event event, const char* format, ...) { - va_list args; - va_start(args, format); - - const int len = vsnprintf(nullptr, 0, format, args) + 1; - char* buf = new char[len]; - vsnprintf(buf, len, format, args); - - va_end(args); - - __android_log_print(severityToPriority(severity), EventClass(event).c_str(), "%s", buf); - - delete buf; - buf = nullptr; -} - -void AndroidLogBackend::record(EventSeverity severity, Event event, int64_t code) { - __android_log_print(severityToPriority(severity), EventClass(event).c_str(), "(%" PRId64 ")", code); -} - void AndroidLogBackend::record(EventSeverity severity, Event event, int64_t code, const std::string &msg) { __android_log_print(severityToPriority(severity), EventClass(event).c_str(), "(%" PRId64 ") %s", code, msg.c_str()); } diff --git a/platform/darwin/log_nslog.mm b/platform/darwin/log_nslog.mm index a82d78a01..edcf41ebb 100644 --- a/platform/darwin/log_nslog.mm +++ b/platform/darwin/log_nslog.mm @@ -2,34 +2,8 @@ #import -#include - namespace mbgl { -void NSLogBackend::record(EventSeverity severity, Event event, const std::string &msg) { - NSString *message = - [[NSString alloc] initWithBytes:msg.data() length:msg.size() encoding:NSUTF8StringEncoding]; - NSLog(@"[%s] %s: %@", EventSeverityClass(severity).c_str(), EventClass(event).c_str(), message); -} - -void NSLogBackend::record(EventSeverity severity, Event event, const char *format, ...) { - va_list args; - va_start(args, format); - const size_t len = vsnprintf(NULL, 0, format, args); - va_end(args); - std::unique_ptr buffer(new char[len + 1]); - va_start(args, format); - vsnprintf(buffer.get(), len + 1, format, args); - va_end(args); - NSLog(@"[%s] %s: %s", EventSeverityClass(severity).c_str(), EventClass(event).c_str(), - buffer.get()); -} - -void NSLogBackend::record(EventSeverity severity, Event event, int64_t code) { - NSLog(@"[%s] %s: (%lld)", EventSeverityClass(severity).c_str(), EventClass(event).c_str(), - code); -} - void NSLogBackend::record(EventSeverity severity, Event event, int64_t code, const std::string &msg) { NSString *message = diff --git a/platform/default/log_stderr.cpp b/platform/default/log_stderr.cpp index 62938b6d6..891bfd57f 100644 --- a/platform/default/log_stderr.cpp +++ b/platform/default/log_stderr.cpp @@ -1,30 +1,11 @@ #include #include -#include namespace mbgl { -void StderrLogBackend::record(EventSeverity severity, Event event, const std::string &msg) { - std::cerr << "[" << severity << "] " << event << ": " << msg << std::endl; -} - -void StderrLogBackend::record(EventSeverity severity, Event event, const char* format, ...) { - std::cerr << "[" << severity << "] " << event << ": "; - va_list args; - va_start(args, format); - vfprintf(stderr, format, args); - va_end(args); - std::cerr << std::endl; -} - -void StderrLogBackend::record(EventSeverity severity, Event event, int64_t code) { - std::cerr << "[" << severity << "] " << event << ": (" << code << ")" << std::endl; -} - void StderrLogBackend::record(EventSeverity severity, Event event, int64_t code, const std::string &msg) { std::cerr << "[" << severity << "] " << event << ": (" << code << ") " << msg << std::endl; - } } diff --git a/src/mbgl/platform/log.cpp b/src/mbgl/platform/log.cpp index b83c7a932..71463dc2f 100644 --- a/src/mbgl/platform/log.cpp +++ b/src/mbgl/platform/log.cpp @@ -1,7 +1,27 @@ #include +#include + namespace mbgl { std::unique_ptr Log::Backend; +void LogBackend::record(EventSeverity severity, Event event, const std::string &msg) { + record(severity, event, -1, msg); +} + +void LogBackend::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 LogBackend::record(EventSeverity severity, Event event, int64_t code) { + record(severity, event, code, std::string()); +} + }