1
1
#include < jni.h>
2
- #include < android/log.h>
3
2
#include < string_view>
4
3
#include < functional>
5
4
6
5
#include " session/logging.hpp"
7
6
#include " session/log_level.h"
8
7
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
41
32
}
42
33
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