From cf8fc08e701e5b4340700bf08b8125a8d6916d59 Mon Sep 17 00:00:00 2001 From: Tobrun Date: Mon, 16 Jul 2018 16:54:58 +0200 Subject: [android] - add c++ integratio for logger, platform logs are now forwarded to the abstract logger --- platform/android/config.cmake | 2 ++ platform/android/src/jni.cpp | 4 ++++ platform/android/src/logger.cpp | 33 ++++++++++++++++++++++++++++++++ platform/android/src/logger.hpp | 24 +++++++++++++++++++++++ platform/android/src/logging_android.cpp | 29 ++++------------------------ 5 files changed, 67 insertions(+), 25 deletions(-) create mode 100644 platform/android/src/logger.cpp create mode 100644 platform/android/src/logger.hpp diff --git a/platform/android/config.cmake b/platform/android/config.cmake index fa26987e5a..de83372373 100644 --- a/platform/android/config.cmake +++ b/platform/android/config.cmake @@ -43,6 +43,8 @@ macro(mbgl_platform_core) PRIVATE platform/android/src/text/local_glyph_rasterizer_jni.hpp PRIVATE platform/android/src/logging_android.cpp PRIVATE platform/android/src/thread.cpp + PRIVATE platform/android/src/logger.cpp + PRIVATE platform/android/src/logger.hpp PRIVATE platform/default/string_stdlib.cpp PRIVATE platform/default/bidi.cpp PRIVATE platform/default/thread_local.cpp diff --git a/platform/android/src/jni.cpp b/platform/android/src/jni.cpp index beb2c14eb3..a6fae08dc5 100755 --- a/platform/android/src/jni.cpp +++ b/platform/android/src/jni.cpp @@ -49,6 +49,7 @@ #include "text/collator_jni.hpp" #include "text/local_glyph_rasterizer_jni.hpp" #include "java/lang.hpp" +#include "logger.hpp" namespace mbgl { namespace android { @@ -191,6 +192,9 @@ void registerNatives(JavaVM *vm) { LocalGlyphRasterizer::registerNative(env); Locale::registerNative(env); Collator::registerNative(env); + + // log + Logger::registerNative(env); } } // namespace android diff --git a/platform/android/src/logger.cpp b/platform/android/src/logger.cpp new file mode 100644 index 0000000000..a0d36fb2d4 --- /dev/null +++ b/platform/android/src/logger.cpp @@ -0,0 +1,33 @@ +#include "logger.hpp" +#include "java_types.hpp" + +namespace mbgl { +namespace android { + +void Logger::registerNative(jni::JNIEnv& env) { + _class = *jni::Class::Find(env).NewGlobalRef(env).release(); +} + +jni::Class Logger::_class; + +void Logger::log(jni::JNIEnv& env, EventSeverity severity, const std::string &msg) { + auto message = jni::Make(env, msg); + using Signature = void(jni::String); + + if(severity == EventSeverity::Debug){ + auto method = _class.GetStaticMethod(env, "d"); + _class.Call(env, method, message); + }else if(severity == EventSeverity::Info){ + auto method = _class.GetStaticMethod(env, "i"); + _class.Call(env, method, message); + }else if(severity == EventSeverity::Warning){ + auto method = _class.GetStaticMethod(env, "w"); + _class.Call(env, method, message); + }else{ + auto method = _class.GetStaticMethod(env, "e"); + _class.Call(env, method, message); + } +} + +} // namespace android +} // namespace mbgl diff --git a/platform/android/src/logger.hpp b/platform/android/src/logger.hpp new file mode 100644 index 0000000000..d4805fccd8 --- /dev/null +++ b/platform/android/src/logger.hpp @@ -0,0 +1,24 @@ +#pragma once + +#include +#include +#include "bitmap.hpp" + +namespace mbgl { +namespace android { + +class Logger { +public: + static constexpr auto Name() { + return "com/mapbox/mapboxsdk/log/Logger"; + }; + static void registerNative(jni::JNIEnv&); + + static void log(jni::JNIEnv&, EventSeverity severity, const std::string &msg); + +private: + static jni::Class _class; +}; + +} // namespace android +} // namespace mbgl \ No newline at end of file diff --git a/platform/android/src/logging_android.cpp b/platform/android/src/logging_android.cpp index 2e025c059f..c92c613a21 100644 --- a/platform/android/src/logging_android.cpp +++ b/platform/android/src/logging_android.cpp @@ -1,34 +1,13 @@ #include -#include +#include "logger.hpp" +#include "attach_env.hpp" namespace mbgl { -namespace { - -int severityToPriority(EventSeverity severity) { - switch(severity) { - case EventSeverity::Debug: - return ANDROID_LOG_DEBUG; - - case EventSeverity::Info: - return ANDROID_LOG_INFO; - - case EventSeverity::Warning: - return ANDROID_LOG_WARN; - - case EventSeverity::Error: - return ANDROID_LOG_ERROR; - - default: - return ANDROID_LOG_VERBOSE; - } -} - -} // namespace - void Log::platformRecord(EventSeverity severity, const std::string &msg) { - __android_log_print(severityToPriority(severity), "mbgl", "%s", msg.c_str()); + auto env{ android::AttachEnv() }; + android::Logger::log(*env, severity, msg); } } -- cgit v1.2.1