11#include < jni.h>
2- #include < android/log.h>
32#include < string_view>
43#include < functional>
54
65#include " session/logging.hpp"
76#include " session/log_level.h"
87
9- #define LOG_TAG " LibSession"
10-
11- extern " C" JNIEXPORT void JNICALL
12- Java_network_loki_messenger_libsession_1util_util_Logger_initLogger (JNIEnv* env, jclass clazz) {
13- session::add_logger ([](std::string_view msg, std::string_view category, session::LogLevel level) {
14- android_LogPriority prio = ANDROID_LOG_VERBOSE;
15-
16- switch (level.level ) {
17- case LOG_LEVEL_TRACE:
18- prio = ANDROID_LOG_VERBOSE;
19- break ;
20-
21- case LOG_LEVEL_DEBUG:
22- prio = ANDROID_LOG_DEBUG;
23- break ;
24-
25- case LOG_LEVEL_INFO:
26- prio = ANDROID_LOG_INFO;
27- break ;
28-
29- case LOG_LEVEL_WARN:
30- prio = ANDROID_LOG_WARN;
31- break ;
32-
33- case LOG_LEVEL_ERROR:
34- case LOG_LEVEL_CRITICAL:
35- prio = ANDROID_LOG_ERROR;
36- break ;
37-
38- default :
39- prio = ANDROID_LOG_INFO;
40- break ;
8+ #include " jni_utils.h"
9+
10+ using namespace jni_utils ;
11+
12+ extern " C"
13+ JNIEXPORT void JNICALL
14+ Java_network_loki_messenger_libsession_1util_util_Logger_00024Companion_addLogger (JNIEnv *env, jclass clazz,
15+ jobject logger) {
16+ JavaVM *vm = nullptr ;
17+ env->GetJavaVM (&vm);
18+ if (!vm) {
19+ env->ThrowNew (env->FindClass (" java/lang/RuntimeException" ), " Failed to get JavaVM" );
20+ return ;
21+ }
22+
23+ jmethodID logMethod = env->GetMethodID (env->GetObjectClass (logger), " log" ,
24+ " (Ljava/lang/String;Ljava/lang/String;I)V" );
25+
26+ auto loggerRef = env->NewGlobalRef (logger);
27+ session::add_logger ([vm, logMethod, loggerRef](std::string_view msg, std::string_view category, session::LogLevel level) {
28+ JNIEnv *env = nullptr ;
29+ vm->AttachCurrentThread (&env, nullptr );
30+ if (!env) {
31+ return ; // Failed to attach thread, cannot log
4132 }
4233
43- __android_log_print (prio, LOG_TAG, " %.*s [%.*s]" ,
44- static_cast <int >(msg.size ()), msg.data (),
45- static_cast <int >(category.size ()), category.data ());
46- });
47- }
34+ env->CallVoidMethod (loggerRef, logMethod,
35+ JavaLocalRef (env, env->NewStringUTF (msg.data ())).get (),
36+ JavaLocalRef (env, env->NewStringUTF (category.data ())).get (),
37+ static_cast <jint>(level.level )
38+ );
39+ });
40+ }
0 commit comments