Android中Logcat日志打印不全解決辦法

在開發(fā)中我們常常會打Log來調(diào)試程序,但有時候打印的信息長度非常長,比如我們想打Log查看接口返回的json數(shù)據(jù),而這個json數(shù)據(jù)非常大時,這時Logcat會出現(xiàn)打印不全的情況。

原因

Android系統(tǒng)對日志長度有限制的,最大長度為4K(注意是字符串的長度),超過這個范圍的自動截斷,所以就會出現(xiàn)打印不全的情況。

從Android內(nèi)核源碼來看,在logger.h頭文件中有以下宏定義:

#define LOGGER_ENTRY_MAX_LEN        (4*1024)  
#define LOGGER_ENTRY_MAX_PAYLOAD    \  
    (LOGGER_ENTRY_MAX_LEN - sizeof(struct logger_entry))

可以看到第一行定義了LOGGER_ENTRY_MAX_LEN為4*1024,即日志的最大長度為4k。

知道了問題的原因,下面來看看怎么解決。

解決辦法

既然一次只能打印4K長度的信息,那很容易想到將待打印的信息拆分成一個個信息段,然后分別打印即可。

我在實際測試時發(fā)現(xiàn),日志的最大長度其實是略小于4*1024的,為了保險起見,我們設(shè)置每一段日志長度segmentSize = 3*1024。如果待打印的字符串信息長度小于等于segmentSize,則直接打印即可;如果大于segmentSize則將日志信息截斷為一段一段分別打印。

代碼如下:

public class LogUtil {
    /**
     * 截斷輸出日志
     * @param msg
     */
    public static void e(String tag, String msg) {
        if (tag == null || tag.length() == 0 
                || msg == null || msg.length() == 0)
            return;

        int segmentSize = 3 * 1024;
        long length = msg.length();
        if (length <= segmentSize ) {// 長度小于等于限制直接打印
             Log.e(tag, msg);
        }else {
            while (msg.length() > segmentSize ) {// 循環(huán)分段打印日志
                String logContent = msg.substring(0, segmentSize );
                msg = msg.replace(logContent, "");
                Log.e(tag, logContent);
            }
            Log.e(tag, msg);// 打印剩余日志    
        }
    }
}  
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,694評論 19 139
  • 在應(yīng)用程序中添加日志記錄總的來說基于三個目的:監(jiān)視代碼中變量的變化情況,周期性的記錄到文件中供其他應(yīng)用進(jìn)行統(tǒng)計分析...
    時待吾閱讀 5,242評論 1 13
  • 在應(yīng)用程序中添加日志記錄總的來說基于三個目的:監(jiān)視代碼中變量的變化情況,周期性的記錄到文件中供其他應(yīng)用進(jìn)行統(tǒng)計分析...
    時待吾閱讀 5,165評論 0 6
  • 今天的主題是隨便寫,那我也隨便侃幾句了。 天氣悶熱,心情跟天氣一樣煩躁。再加上攔路搶劫般的一場官司,而且我們又...
    someway閱讀 306評論 0 3
  • 總是急于達(dá)成一些事情 急于讓某個人喜歡自己 急于去走一段路 急于去看一本書 卻忘了正是這急于的過程 富裕我的才是最...
    菀卿閱讀 182評論 0 0

友情鏈接更多精彩內(nèi)容