package com.xabber.android.data.log;
import android.util.Log;
import java.util.logging.*;
/**
* Make JUL work on Android.
*
* http://stackoverflow.com/questions/4561345/how-to-configure-java-util-logging-on-android/9047282#9047282
*/
public class AndroidLoggingHandler extends Handler {
public static void reset(Handler rootHandler) {
Logger rootLogger = java.util.logging.LogManager.getLogManager().getLogger("");
Handler[] handlers = rootLogger.getHandlers();
for (Handler handler : handlers) {
rootLogger.removeHandler(handler);
}
java.util.logging.LogManager.getLogManager().getLogger("").addHandler(rootHandler);
}
private static final Formatter FORMATTER = new Formatter() {
@Override
public String format(LogRecord logRecord) {
return formatMessage(logRecord);
}
};
@Override
public void close() {
}
@Override
public void flush() {
}
@Override
public void publish(LogRecord record) {
if (!super.isLoggable(record))
return;
String tag = record.getLoggerName();
final String msg = FORMATTER.format(record);
try {
int level = getAndroidLevel(record.getLevel());
switch (level) {
case Log.ERROR:
LogManager.e(tag, msg);
break;
case Log.WARN:
LogManager.w(tag, msg);
break;
case Log.INFO:
LogManager.i(tag, msg);
break;
case Log.DEBUG:
LogManager.d(tag, msg);
break;
}
if (record.getThrown() != null) {
LogManager.exception(tag, record.getThrown());
}
} catch (RuntimeException e) {
Log.e("AndroidLoggingHandler", "Error logging message.", e);
}
}
private static int getAndroidLevel(Level level) {
int value = level.intValue();
if (value >= 1000) {
return Log.ERROR;
} else if (value >= 900) {
return Log.WARN;
} else if (value >= 800) {
return Log.INFO;
} else {
return Log.DEBUG;
}
}
}