package com.javalive09.codebag;
import android.text.TextUtils;
/**
* log util for auto print invoker class and method name
* Created by peter on 16/9/21.
*/
public class LogUtil {
private static String PACKAGE_NAME = "com.javalive09.codebag";
private static String CLASS_NAME = LogUtil.class.getSimpleName();
private static final boolean DEBUG = false;
private static StringBuffer mLog = new StringBuffer();
private static long startTime = 0;
public static void i(String msg) {
if (DEBUG) {
CallerInfo info = CallerInfo.get(PACKAGE_NAME, CLASS_NAME, "i");
if(info != null) {
mLog.append(info.className).append(" > ").append(info.methodName).append(": ").append(msg).append("\n");
android.util.Log.i(info.className, info.methodName + ": " + msg);
}
}
}
public static void w(String msg) {
if (DEBUG) {
CallerInfo info = CallerInfo.get(PACKAGE_NAME, CLASS_NAME, "w");
if(info != null) {
mLog.append(info.className).append(" > ").append(info.methodName).append(": ").append(msg).append("\n");
android.util.Log.w(info.className, info.methodName + ": " + msg);
}
}
}
public static void e(String msg) {
if (DEBUG) {
CallerInfo info = CallerInfo.get(PACKAGE_NAME, CLASS_NAME, "e");
if(info != null) {
mLog.append(info.className).append(" > ").append(info.methodName).append(": ").append(msg).append("\n");
android.util.Log.e(info.className, info.methodName + ": " + msg);
}
}
}
static String getLog() {
if (DEBUG) {
return mLog.toString();
}
return "";
}
static void clearLog() {
if (DEBUG) {
mLog.setLength(0);
}
}
public static void startCountTime(String msg) {
if (DEBUG) {
startTime = System.currentTimeMillis();
LogUtil.i("startTime=" + startTime + ">>>>>>>>>>>>>>>>>>>>>>> " + msg);
}
}
public static long endCountTime(String msg) {
if (DEBUG) {
long endTime = System.currentTimeMillis();
long detaTime = endTime - startTime;
LogUtil.i(" cost =" + detaTime + ">>>>>>>>>>>>>>>>>>>>>>> " + msg);
return detaTime;
}
return 0;
}
private static class CallerInfo {
String className;
String methodName;
CallerInfo(String className, String methodName) {
this.className = className;
this.methodName = methodName;
}
/**
*
* @param packageName your package name
* @param currentClassName your class name
* @param currentMethodName you current method name
* @return CallerInfo contain invoker's method name and class name
*/
public static CallerInfo get(String packageName, String currentClassName, String currentMethodName) {
StackTraceElement stack[] = Thread.currentThread().getStackTrace();
for (int i = 0; i < stack.length; i++) {
String className = stack[i].getClassName() + "." + stack[i].getMethodName();
String methodSign = packageName + "." + currentClassName + "." + currentMethodName;
if (!TextUtils.isEmpty(className)
&& !TextUtils.isEmpty(methodSign)
&& className.contains(methodSign)) {
StackTraceElement invoker = stack[i + 1];
String javaFileName = invoker.getClassName(); //Caller.java
String[] name = javaFileName.split("\\.");
String callerClassName = name[name.length - 1] + ".java";
String callerMethodName = invoker.getMethodName() + "()"; //showCallerInfo
return new CallerInfo(callerClassName, callerMethodName);
}
}
return null;
}
}
}