Enable finest logging from dependencies to logcat

Stephen Paul Weber created

Change summary

src/cheogram/java/com/cheogram/android/AndroidLoggingHandler.java        | 63 
src/main/java/eu/siacs/conversations/services/XmppConnectionService.java |  2 
2 files changed, 65 insertions(+)

Detailed changes

src/cheogram/java/com/cheogram/android/AndroidLoggingHandler.java 🔗

@@ -0,0 +1,63 @@
+package com.cheogram.android;
+
+import android.util.Log;
+import java.util.logging.*;
+
+/**
+ * Make JUL work on Android.
+ * https://stackoverflow.com/a/9047282/8611
+ */
+public class AndroidLoggingHandler extends Handler {
+
+	public static void reset(Handler rootHandler) {
+		Logger rootLogger = LogManager.getLogManager().getLogger("");
+		Handler[] handlers = rootLogger.getHandlers();
+		for (Handler handler : handlers) {
+			rootLogger.removeHandler(handler);
+		}
+		rootLogger.addHandler(rootHandler);
+	}
+
+	@Override
+	public void close() {
+	}
+
+	@Override
+	public void flush() {
+	}
+
+	@Override
+	public void publish(LogRecord record) {
+		if (!super.isLoggable(record))
+			return;
+
+		String name = record.getLoggerName();
+		int maxLength = 30;
+		String tag = name.length() > maxLength ? name.substring(name.length() - maxLength) : name;
+
+		try {
+			int level = getAndroidLevel(record.getLevel());
+			final var msg = new SimpleFormatter().format(record);
+			Log.println(level, tag, msg);
+			if (record.getThrown() != null) {
+				Log.println(level, tag, Log.getStackTraceString(record.getThrown()));
+			}
+		} catch (RuntimeException e) {
+			Log.e("AndroidLoggingHandler", "Error logging message.", e);
+		}
+	}
+
+	static int getAndroidLevel(Level level) {
+		int value = level.intValue();
+
+		if (value >= Level.SEVERE.intValue()) {
+			return Log.ERROR;
+		} else if (value >= Level.WARNING.intValue()) {
+			return Log.WARN;
+		} else if (value >= Level.INFO.intValue()) {
+			return Log.INFO;
+		} else {
+			return Log.DEBUG;
+		}
+	}
+}

src/main/java/eu/siacs/conversations/services/XmppConnectionService.java 🔗

@@ -1497,6 +1497,8 @@ public class XmppConnectionService extends Service {
     @SuppressLint("TrulyRandom")
     @Override
     public void onCreate() {
+        com.cheogram.android.AndroidLoggingHandler.reset(new com.cheogram.android.AndroidLoggingHandler());
+        java.util.logging.Logger.getLogger("").setLevel(java.util.logging.Level.FINEST);
         LibIdnXmppStringprep.setup();
         emojiSearch = new EmojiSearch(this);
         setTheme(R.style.Theme_Conversations3);