Logging is an important technique of debugging during application development. Android provide Log class for logging different log-level messages. However in order to easily filter the log messages (in Logcat) and directly pinpointing the location of log message is a bit tricky (with default Log class).
I have implemented my own Log class primarily:
I have implemented my own Log class primarily:
- To set one application TAG (for ease of filtering).
- To make logging enable/disable for development and release version.
- and to print classname:function name:line no with log message like __FILE__,__FUNC__ and __LINE__ macros in C.
public class Log {
private static boolean enableLog = true;
private static String TAG = "YourAppTag";
public static void i(Object... objects) {
if (enableLog) {
android.util.Log.i(TAG, toString(objects));
}
}
public static void d(Object... objects) {
if (enableLog) {
String fullClassName = Thread.currentThread().getStackTrace()[3]
.getClassName();
String className = fullClassName.substring(fullClassName
.lastIndexOf(".") + 1);
String methodName = Thread.currentThread().getStackTrace()[3]
.getMethodName();
int lineNumber = Thread.currentThread().getStackTrace()[3]
.getLineNumber();
String finalMessage = className + "." + methodName + "():Line:"
+ lineNumber + ":" + toString(objects);
android.util.Log.d(TAG, finalMessage);
}
}
public static void e(Object... objects) {
if (enableLog) {
android.util.Log.e(TAG, toString(objects));
}
}
public static void w(Object... objects) {
if (enableLog) {
android.util.Log.w(TAG, toString(objects));
}
}
private static String toString(Object... objects) {
StringBuilder sb = new StringBuilder();
for (Object o : objects) {
sb.append(o);
}
return sb.toString();
}
}