Android日誌類----CscSDK

轉載請註明出處

我想要的日誌打印,是包含線程id,日誌所在文件,日誌所在的方法,以及日誌所在的行數,再加上log自帶的日級別和日誌內容。

其他都好搞定,日誌所在文件,日誌所在的方法,以及日誌所在的行數,需要使用stackTrace(堆棧軌跡);

下面我們來看一段代碼:

public class TestClass {  
    public static void main(String[] args)  
    {
        new TestClass().methodA();
    }


    private void methodA(){
        System.out.println("------進入methodA----------");
        methodB();
    }


    private void methodB(){
        System.out.println("------進入methodB----------");
        StackTraceElement elements[] = Thread.currentThread().getStackTrace();
        for (int i = 0; i < elements.length; i++) {
            StackTraceElement stackTraceElement=elements[i];
            String className=stackTraceElement.getClassName();
            String methodName=stackTraceElement.getMethodName();
            String fileName=stackTraceElement.getFileName();
            int lineNumber=stackTraceElement.getLineNumber();
            System.out.println("StackTraceElement數組下標 i="+i+",fileName="
                    +fileName+",className="+className+",methodName="+methodName+",lineNumber="+lineNumber);
        }
    }
}


輸出結果爲

可以看到分別輸出了這條打印語句在本堆棧中,在方法B中,在方法A中,在本文件中,的所在的位置。

那麼怎麼定位到我們想要的那一行呢?在網上看到了鴻洋大神的寫法


private static StackTraceElement getTargetStackTraceElement() {
    // find the target invoked method
    StackTraceElement targetStackTrace = null;
    boolean shouldTrace = false;
    StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
    for (StackTraceElement stackTraceElement : stackTrace) {
        boolean isLogMethod = stackTraceElement.getClassName().equals(LogUtil.class.getName());
        if (shouldTrace && !isLogMethod) {
            targetStackTrace = stackTraceElement;
            break;
        }
        shouldTrace = isLogMethod;
    }
    return targetStackTrace;
}



難點和原理講完了就差拼裝自己的LogUtil。

打印效果圖爲:


點擊下載源碼:

http://download.csdn.net/download/u010686002/10000706

備註:這是我第一個系列的微博,有意見可以在地下留言。


本文參考的文章:

http://blog.csdn.net/lmj623565791/article/details/52506545

http://blog.csdn.net/hp910315/article/details/52702199


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