在Android调试的时候,有时候需要打印指定的行号和类名。
下面是一个调试log的类。
package com.project.mocha_doctor.common;
import android.util.Log;
public class SmabDebug {
private final static boolean DEBUG = true;
private final static String TAG = "YXH";
private final static int pos = 3;
public static void log(String message)
{
if (DEBUG)
{
String fullClassName = Thread.currentThread().getStackTrace()[pos].getClassName();
String className = fullClassName.substring(fullClassName.lastIndexOf(".") + 1);
String methodName = Thread.currentThread().getStackTrace()[pos].getMethodName();
int lineNumber = Thread.currentThread().getStackTrace()[pos].getLineNumber();
Log.i(TAG + " - " + className + "." + methodName + "():" + lineNumber, message);
}
}
/*
0 VMStack.getThreadStackTrace()
1 Thread.getStackTrace()
2 SmabDebug.printStack()
3 HttpRequestTask.onPostExecute()
4 HttpRequestTask.onPostExecute()
5 AsyncTask.finish()
6 AsyncTask.access$600()
7 AsyncTask$InternalHandler.handleMessage()
8 Handler.dispatchMessage()
9 Looper.loop()
10 ActivityThread.main()
11 Method.invokeNative()
12 Method.invoke()
13 ZygoteInit$MethodAndArgsCaller.run()
14 ZygoteInit.main()
15 NativeStart.main()
If the value = 3, it means the caller Class.
*/
public static void printStack (){
int deep = Thread.currentThread().getStackTrace().length;
for (int i = 0; i < deep; i ++){
String fullClassName = Thread.currentThread().getStackTrace()[i].getClassName();
String className = fullClassName.substring(fullClassName.lastIndexOf(".") + 1);
String methodName = Thread.currentThread().getStackTrace()[i].getMethodName();
Log.i(TAG, className + "." + methodName + "()");
}
}
}
调用的时候只需要简单的
SmabDebug.log ( "Status code ---->" + codeStr);
log输出为如下, 不会输出这个类名。
I/YXH - ServerTimeSyncUp$GETRequestListener.ServerResponse():86(13348): Status code----->145