package net.i2p.util; /* * public domain * */ /** * bridge to android logging * * @author zzz */ class AndroidLogWriter extends LogWriter { public AndroidLogWriter(LogManager manager) { super(manager); } public String currentFile() { throw new UnsupportedOperationException(); } @Override protected void writeRecord(LogRecord rec, String s) { //noinspection ThrowableResultOfMethodCallIgnored if (rec.getThrowable() == null) log(rec.getPriority(), rec.getSource(), rec.getSourceName(), rec.getThreadName(), rec.getMessage()); else log(rec.getPriority(), rec.getSource(), rec.getSourceName(), rec.getThreadName(), rec.getMessage(), rec.getThrowable()); } @Override protected void writeRecord(int priority, String s) { android.util.Log.println(toAndroidLevel(priority), ANDROID_LOG_TAG, s); } @Override protected void flushWriter() { // nop } @Override protected void closeWriter() { // nop } private static final String ANDROID_LOG_TAG = "I2P"; public void log(int priority, Class<?> src, String name, String threadName, String msg) { if (src != null) { String tag = src.getName(); int dot = tag.lastIndexOf("."); if (dot >= 0) tag = tag.substring(dot + 1); android.util.Log.println(toAndroidLevel(priority), ANDROID_LOG_TAG, tag + " [" + threadName + "] " + msg); } else if (name != null) android.util.Log.println(toAndroidLevel(priority), ANDROID_LOG_TAG, name + " [" + threadName + "] " + msg); else android.util.Log.println(toAndroidLevel(priority), ANDROID_LOG_TAG, '[' + threadName + "] " + msg); } public void log(int priority, Class<?> src, String name, String threadName, String msg, Throwable t) { if (src != null) { String tag = src.getName(); int dot = tag.lastIndexOf("."); if (dot >= 0) tag = tag.substring(dot + 1); android.util.Log.println(toAndroidLevel(priority), ANDROID_LOG_TAG, tag + " [" + threadName + "] " + msg + ' ' + t.toString() + ' ' + android.util.Log.getStackTraceString(t)); } else if (name != null) android.util.Log.println(toAndroidLevel(priority), ANDROID_LOG_TAG, name + " [" + threadName + "] " + msg + ' ' + t.toString() + ' ' + android.util.Log.getStackTraceString(t)); else android.util.Log.println(toAndroidLevel(priority), ANDROID_LOG_TAG, '[' + threadName + "] " + msg + ' ' + t.toString() + ' ' + android.util.Log.getStackTraceString(t)); } private static int toAndroidLevel(int level) { switch (level) { case Log.DEBUG: return android.util.Log.DEBUG; case Log.INFO: return android.util.Log.INFO; case Log.WARN: return android.util.Log.WARN; case Log.ERROR: case Log.CRIT: default: return android.util.Log.ERROR; } } }