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
@@ -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;
+ }
+ }
+}
@@ -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);