public class DebugLog{
static String className;
static String methodName;
private DebugLog(){
/* Protect from instantiations */
}
public static boolean isDebuggable(){
return BuildConfig.DEBUG;
}
private static String createLog(String log){
StringBuffer buffer = new StringBuffer();
buffer.append("[");
buffer.append(methodName);
buffer.append("]");
buffer.append(log);
return buffer.toString();
}
private static void getMethodNames(StackTraceElement[] sElements){
className = sElements[1].getFileName();
methodName = sElements[1].getMethodName();
}
public static void e(String message){
if (!isDebuggable())
return;
// Throwable instance must be created before any methods
getMethodNames(new Throwable().getStackTrace());
Log.e(className, createLog(message));
}
public static void i(String message){
if (!isDebuggable())
return;
getMethodNames(new Throwable().getStackTrace());
Log.i(className, createLog(message));
}
public static void d(String message){
if (!isDebuggable())
return;
getMethodNames(new Throwable().getStackTrace());
Log.d(className, createLog(message));
}
public static void v(String message){
if (!isDebuggable())
return;
getMethodNames(new Throwable().getStackTrace());
Log.v(className, createLog(message));
}
public static void w(String message){
if (!isDebuggable())
return;
getMethodNames(new Throwable().getStackTrace());
Log.w(className, createLog(message));
}
public static void wtf(String message){
if (!isDebuggable())
return;
getMethodNames(new Throwable().getStackTrace());
Log.wtf(className, createLog(message));
}
}
调用:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DebugLog.e("simple log from onCreate()");
myFunc();
mySecondFunc();
}
void myFunc(){
DebugLog.e("simple log from myFunc()");
}
void mySecondFunc(){
DebugLog.i("simple log from mySecondFunc()");
}
@Override
protected void onResume() {
super.onResume();
DebugLog.v("v log");
DebugLog.w("w log");
DebugLog.wtf("wtf log");
}