移动应用
876
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"); }

