package com.scottyab.rootbeer.util;
import java.io.PrintWriter;
import java.io.StringWriter;
import android.util.Log;
public final class QLog {
public static final int NONE = 0;
public static final int ERRORS_ONLY = 1;
public static final int ERRORS_WARNINGS = 2;
public static final int ERRORS_WARNINGS_INFO = 3;
public static final int ERRORS_WARNINGS_INFO_DEBUG = 4;
public static final int ALL = 5;
public static int LOGGING_LEVEL = ALL;
/*
* For filtering app specific output
*/
private static final String TAG = "RootBeer";
/*
* So any important logs can be outputted in non filtered output also
*/
private static final String TAG_GENERAL_OUTPUT = "QLog";
static {
i("Log class reloaded");
}
/**
* @param obj
* @param cause
* The exception which caused this error, may not be null
*/
public static void e(final Object obj, final Throwable cause) {
if (isELoggable()) {
Log.e(TAG, getTrace() + String.valueOf(obj));
Log.e(TAG, getThrowableTrace(cause));
Log.e(TAG_GENERAL_OUTPUT, getTrace() + String.valueOf(obj));
Log.e(TAG_GENERAL_OUTPUT, getThrowableTrace(cause));
}
}
public static void e(final Object obj) {
if (isELoggable()) {
Log.e(TAG, getTrace() + String.valueOf(obj));
Log.e(TAG_GENERAL_OUTPUT, getTrace() + String.valueOf(obj));
}
}
public static void w(final Object obj, final Throwable cause) {
if (isWLoggable()) {
Log.w(TAG, getTrace() + String.valueOf(obj));
Log.w(TAG, getThrowableTrace(cause));
Log.w(TAG_GENERAL_OUTPUT, getTrace() + String.valueOf(obj));
Log.w(TAG_GENERAL_OUTPUT, getThrowableTrace(cause));
}
}
public static void w(final Object obj) {
if (isWLoggable()) {
Log.w(TAG, getTrace() + String.valueOf(obj));
Log.w(TAG_GENERAL_OUTPUT, getTrace() + String.valueOf(obj));
}
}
public static void i(final Object obj) {
if (isILoggable()) {
Log.i(TAG, getTrace() + String.valueOf(obj));
}
}
public static void d(final Object obj) {
if (isDLoggable()) {
Log.d(TAG, getTrace() + String.valueOf(obj));
}
}
public static void v(final Object obj) {
if (isVLoggable()) {
Log.v(TAG, getTrace() + String.valueOf(obj));
}
}
public static boolean isVLoggable() {
return LOGGING_LEVEL > ERRORS_WARNINGS_INFO_DEBUG;
}
public static boolean isDLoggable() {
return LOGGING_LEVEL > ERRORS_WARNINGS_INFO;
}
public static boolean isILoggable() {
return LOGGING_LEVEL > ERRORS_WARNINGS;
}
public static boolean isWLoggable() {
return LOGGING_LEVEL > ERRORS_ONLY;
}
public static boolean isELoggable() {
return LOGGING_LEVEL > NONE;
}
private static String getThrowableTrace(final Throwable thr) {
StringWriter b = new StringWriter();
thr.printStackTrace(new PrintWriter(b));
return b.toString();
}
private static String getTrace() {
int depth = 2;
Throwable t = new Throwable();
StackTraceElement[] elements = t.getStackTrace();
String callerMethodName = elements[depth].getMethodName();
String callerClassPath = elements[depth].getClassName();
int lineNo = elements[depth].getLineNumber();
int i = callerClassPath.lastIndexOf('.');
String callerClassName = callerClassPath.substring(i + 1);
return callerClassName + ": " + callerMethodName + "() ["
+ lineNo + "] - ";
}
/**
* Prints the stack trace to mubaloo log and standard log
*
* @param e
*/
public static void handleException(final Exception e) {
QLog.e(e.toString());
e.printStackTrace();
}
private QLog() {
}
}