Skip to content

Commit

Permalink
Refactor C4Log to use proxy (#78)
Browse files Browse the repository at this point in the history
  • Loading branch information
LaurenNguyen14 committed May 12, 2022
1 parent 84386e2 commit a4b667a
Show file tree
Hide file tree
Showing 6 changed files with 179 additions and 118 deletions.
69 changes: 0 additions & 69 deletions common/main/cpp/com_couchbase_lite_internal_core_C4Log.h

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
#include <jni.h>
/* Header for class com_couchbase_lite_internal_core_impl_NativeC4Log */

#ifndef _Included_com_couchbase_lite_internal_core_impl_NativeC4Log
#define _Included_com_couchbase_lite_internal_core_impl_NativeC4Log
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_couchbase_lite_internal_core_impl_NativeC4Log
* Method: log
* Signature: (Ljava/lang/String;ILjava/lang/String;)V
*/
JNIEXPORT void JNICALL Java_com_couchbase_lite_internal_core_impl_NativeC4Log_log
(JNIEnv *, jclass, jstring, jint, jstring);

/*
* Class: com_couchbase_lite_internal_core_impl_NativeC4Log
* Method: getBinaryFileLevel
* Signature: ()I
*/
JNIEXPORT jint JNICALL Java_com_couchbase_lite_internal_core_impl_NativeC4Log_getBinaryFileLevel
(JNIEnv *, jclass);

/*
* Class: com_couchbase_lite_internal_core_impl_NativeC4Log
* Method: setBinaryFileLevel
* Signature: (I)V
*/
JNIEXPORT void JNICALL Java_com_couchbase_lite_internal_core_impl_NativeC4Log_setBinaryFileLevel
(JNIEnv *, jclass, jint);

/*
* Class: com_couchbase_lite_internal_core_impl_NativeC4Log
* Method: writeToBinaryFile
* Signature: (Ljava/lang/String;IIJZLjava/lang/String;)V
*/
JNIEXPORT void JNICALL Java_com_couchbase_lite_internal_core_impl_NativeC4Log_writeToBinaryFile
(JNIEnv *, jclass, jstring, jint, jint, jlong, jboolean, jstring);

/*
* Class: com_couchbase_lite_internal_core_impl_NativeC4Log
* Method: getLevel
* Signature: (Ljava/lang/String;)I
*/
JNIEXPORT jint JNICALL Java_com_couchbase_lite_internal_core_impl_NativeC4Log_getLevel
(JNIEnv *, jclass, jstring);

/*
* Class: com_couchbase_lite_internal_core_impl_NativeC4Log
* Method: setCallbackLevel
* Signature: (I)V
*/
JNIEXPORT void JNICALL Java_com_couchbase_lite_internal_core_impl_NativeC4Log_setCallbackLevel
(JNIEnv *, jclass, jint);

/*
* Class: com_couchbase_lite_internal_core_impl_NativeC4Log
* Method: setLevel
* Signature: (Ljava/lang/String;I)V
*/
JNIEXPORT void JNICALL Java_com_couchbase_lite_internal_core_impl_NativeC4Log_setLevel
(JNIEnv *, jclass, jstring, jint);

#ifdef __cplusplus
}
#endif
#endif
30 changes: 15 additions & 15 deletions common/main/cpp/native_c4.cc
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
#endif

#include "com_couchbase_lite_internal_core_C4.h"
#include "com_couchbase_lite_internal_core_C4Log.h"
#include "com_couchbase_lite_internal_core_impl_NativeC4Log.h"
#include "com_couchbase_lite_internal_core_C4Key.h"
#include "native_glue.hh"

Expand Down Expand Up @@ -209,19 +209,19 @@ Java_com_couchbase_lite_internal_core_C4_getVersion(JNIEnv *env, jclass ignore)
// com_couchbase_lite_internal_core_C4Log
// ----------------------------------------------------------------------------
/*
* Class: com_couchbase_lite_internal_core_C4Log
* Class: com_couchbase_lite_internal_core_impl_NativeC4Log
* Method: getLevel
* Signature: (Ljava/lang/String;I)V
*/
JNIEXPORT jint JNICALL
Java_com_couchbase_lite_internal_core_C4Log_getLevel(JNIEnv *env, jclass ignore, jstring jdomain) {
Java_com_couchbase_lite_internal_core_impl_NativeC4Log_getLevel(JNIEnv *env, jclass ignore, jstring jdomain) {
jstringSlice domain(env, jdomain);
C4LogDomain logDomain = c4log_getDomain(domain.c_str(), false);
return (!logDomain) ? -1 : (jint) c4log_getLevel(logDomain);
}

/*
* Class: com_couchbase_lite_internal_core_C4Log
* Class: com_couchbase_lite_internal_core_impl_C4Log
* Method: setLevel
* Signature: (Ljava/lang/String;I)V
*
Expand All @@ -232,7 +232,7 @@ Java_com_couchbase_lite_internal_core_C4Log_getLevel(JNIEnv *env, jclass ignore,
* that domain at any time, including before Core creates it.
*/
JNIEXPORT void JNICALL
Java_com_couchbase_lite_internal_core_C4Log_setLevel(
Java_com_couchbase_lite_internal_core_impl_NativeC4Log_setLevel(
JNIEnv *env,
jclass ignore,
jstring jdomain,
Expand All @@ -243,12 +243,12 @@ Java_com_couchbase_lite_internal_core_C4Log_setLevel(
}

/*
* Class: com_couchbase_lite_internal_core_C4Log
* Class: com_couchbase_lite_internal_core_impl_NativeC4Log_log
* Method: log
* Signature: (Ljava/lang/String;I;Ljava/lang/String)V
*/
JNIEXPORT void JNICALL
Java_com_couchbase_lite_internal_core_C4Log_log(
Java_com_couchbase_lite_internal_core_impl_NativeC4Log_log(
JNIEnv *env,
jclass ignore,
jstring jdomain,
Expand All @@ -262,32 +262,32 @@ Java_com_couchbase_lite_internal_core_C4Log_log(
}

/*
* Class: com_couchbase_lite_internal_core_C4Log
* Class: com_couchbase_lite_internal_core_impl_NativeC4Log
* Method: getBinaryFileLevel
* Signature: (V)I
*/
JNIEXPORT jint JNICALL
Java_com_couchbase_lite_internal_core_C4Log_getBinaryFileLevel(JNIEnv *env, jclass ignore) {
Java_com_couchbase_lite_internal_core_impl_NativeC4Log_getBinaryFileLevel(JNIEnv *env, jclass ignore) {
return c4log_binaryFileLevel();
}

/*
* Class: com_couchbase_lite_internal_core_C4Log
* Class: com_couchbase_lite_internal_core_impl_NativeC4Log
* Method: setBinaryFileLevel
* Signature: (I)V
*/
JNIEXPORT void JNICALL
Java_com_couchbase_lite_internal_core_C4Log_setBinaryFileLevel(JNIEnv *env, jclass ignore, jint level) {
Java_com_couchbase_lite_internal_core_impl_NativeC4Log_setBinaryFileLevel(JNIEnv *env, jclass ignore, jint level) {
c4log_setBinaryFileLevel((C4LogLevel) level);
}

/*
* Class: com_couchbase_lite_internal_core_C4Log
* Class: com_couchbase_lite_internal_core_impl_NativeC4Log
* Method: writeToBinaryFile
* Signature: (Ljava/lang/String;IIJZLjava/lang/String;)V
*/
JNIEXPORT void JNICALL
Java_com_couchbase_lite_internal_core_C4Log_writeToBinaryFile(
Java_com_couchbase_lite_internal_core_impl_NativeC4Log_writeToBinaryFile(
JNIEnv *env,
jclass ignore,
jstring jpath,
Expand All @@ -313,12 +313,12 @@ Java_com_couchbase_lite_internal_core_C4Log_writeToBinaryFile(
}

/*
* Class: com_couchbase_lite_internal_core_C4Log
* Class: com_couchbase_lite_internal_core_impl_NativeC4Log
* Method: setCallbackLevel
* Signature: (I)V
*/
JNIEXPORT void JNICALL
Java_com_couchbase_lite_internal_core_C4Log_setCallbackLevel(JNIEnv *env, jclass clazz, jint jlevel) {
Java_com_couchbase_lite_internal_core_impl_NativeC4Log_setCallbackLevel(JNIEnv *env, jclass clazz, jint jlevel) {
c4log_setCallbackLevel((C4LogLevel) jlevel);
}

Expand Down
69 changes: 36 additions & 33 deletions common/main/java/com/couchbase/lite/internal/core/C4Log.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,35 @@
import com.couchbase.lite.LogLevel;
import com.couchbase.lite.Logger;
import com.couchbase.lite.internal.CouchbaseLiteInternal;
import com.couchbase.lite.internal.core.impl.NativeC4Log;


public class C4Log {
public interface NativeImpl {
void nLog(String domain, int level, String message);
int nGetLevel(String domain);
void nSetLevel(String domain, int level);
void nSetCallbackLevel(int level);
int nGetBinaryFileLevel();
void nSetBinaryFileLevel(int level);
void nWriteToBinaryFile(
String path,
int level,
int maxRotateCount,
long maxSize,
boolean usePlaintext,
String header);
}
@NonNull
public static C4Log create() { return new C4Log(nativeImpl); }

@VisibleForTesting
@NonNull
public static final AtomicReference<C4Log> LOGGER = new AtomicReference<>(new C4Log());
public static final AtomicReference<C4Log> LOGGER = new AtomicReference<>(create());

@NonNull
@VisibleForTesting
static volatile C4Log.NativeImpl nativeImpl = new NativeC4Log();

@NonNull
private static final AtomicReference<LogLevel> CALLBACK_LEVEL = new AtomicReference<>(LogLevel.NONE);
Expand Down Expand Up @@ -103,13 +126,18 @@ public static void logCallback(@NonNull String c4Domain, int c4Level, @NonNull S
m.put(LogLevel.ERROR, C4Constants.LogLevel.ERROR);
LOG_LEVEL_TO_C4 = Collections.unmodifiableMap(m);
}
@NonNull
private final C4Log.NativeImpl impl;

public C4Log(@NonNull NativeImpl impl) { this.impl = impl; }

public final void logToCore(LogDomain domain, LogLevel level, String message) {
log(getC4DomainForLoggingDomain(domain), getC4LevelForLogLevel(level), message);
impl.nLog(getC4DomainForLoggingDomain(domain), getC4LevelForLogLevel(level), message);
}

public final int getFileLogLevel() { return getBinaryFileLevel(); }
public final int getFileLogLevel() { return impl.nGetBinaryFileLevel(); }

public final void setFileFileLevel(LogLevel level) { setBinaryFileLevel(getC4LevelForLogLevel(level)); }
public final void setFileFileLevel(LogLevel level) { impl.nSetBinaryFileLevel(getC4LevelForLogLevel(level)); }

public final void initFileLogger(
String path,
Expand All @@ -118,12 +146,12 @@ public final void initFileLogger(
long maxSize,
boolean plainText,
String header) {
writeToBinaryFile(path, getC4LevelForLogLevel(level), maxRotate, maxSize, plainText, header);
impl.nWriteToBinaryFile(path, getC4LevelForLogLevel(level), maxRotate, maxSize, plainText, header);
}

public final void setLevels(int level, @Nullable String... domains) {
if ((domains == null) || (domains.length <= 0)) { return; }
for (String domain: domains) { setLevel(domain, level); }
for (String domain: domains) { impl.nSetLevel(domain, level); }
}

public final void setCallbackLevel(@NonNull LogLevel consoleLevel) {
Expand All @@ -136,7 +164,7 @@ public final void setCallbackLevel(@NonNull LogLevel consoleLevel) {
public final LogLevel getCallbackLevel() { return CALLBACK_LEVEL.get(); }

@VisibleForTesting
public final int getLogLevel(String domain) { return getLevel(domain); }
public final int getLogLevel(String domain) { return impl.nGetLevel(domain); }

@VisibleForTesting
public final void forceCallbackLevel(@NonNull LogLevel logLevel) {
Expand Down Expand Up @@ -241,7 +269,7 @@ private int getC4LevelForLogLevel(@NonNull LogLevel logLevel) {

private void setCoreCallbackLevel() {
final LogLevel logLevel = CALLBACK_LEVEL.get();
setCallbackLevel(getC4LevelForLogLevel(logLevel));
impl.nSetCallbackLevel(getC4LevelForLogLevel(logLevel));
}

@NonNull
Expand All @@ -251,29 +279,4 @@ private LogLevel getCallbackLevel(@NonNull LogLevel consoleLevel, @Nullable Logg
final LogLevel customLogLevel = customLogger.getLevel();
return (customLogLevel.compareTo(consoleLevel) > 0) ? consoleLevel : customLogLevel;
}


//-------------------------------------------------------------------------
// native methods
//-------------------------------------------------------------------------

private static native void log(String domain, int level, String message);

private static native int getLevel(String domain);

private static native void setLevel(String domain, int level);

private static native void setCallbackLevel(int level);

private static native int getBinaryFileLevel();

private static native void setBinaryFileLevel(int level);

private static native void writeToBinaryFile(
String path,
int level,
int maxRotateCount,
long maxSize,
boolean usePlaintext,
String header);
}
Loading

0 comments on commit a4b667a

Please sign in to comment.