Android部分開源項目源碼分析--log信息的打印

前言:

平常在android應用的開發的過程中間,我們都需要對應用的部分信息,打印出來,好在LogCat中查看。

        然而,普通的日誌的打印,有時候是很難定位到具體的代碼中的。

      在 https://github.com/MustafaFerhan/DebugLog 提供了一種比較好的日誌的顯示的方式。



我們可以定位到具體代碼的每一行和每個方法;

Code:

/**
 * @date 21.06.2012
 * @author Mustafa Ferhan Akman
 * 
 * Create a simple and more understandable Android logs. 
 * */

public class DebugLog{

	static String className;
	static String methodName;
	static int lineNumber;
	
    private DebugLog(){
        /* Protect from instantiations */
    }
   
    /**
     * 判斷是否是處在debug模式下,只有在這種模式下才打印日誌;
     * @return
     */
	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(lineNumber);
		buffer.append("]");
		buffer.append(log);

		return buffer.toString();
	}
	
	private static void getMethodNames(StackTraceElement[] sElements){
		className = sElements[1].getFileName();
		methodName = sElements[1].getMethodName();
		lineNumber = sElements[1].getLineNumber();
	}

	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;
	/**
	 * new Throwable().getStackTrace() 跟蹤應用的堆棧的信息
    */
		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));
	}

}

參考:https://github.com/MustafaFerhan/DebugLog


















發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章