Android 終于知道Log顯示不全的原因了

一個(gè)優(yōu)秀的軟件系統(tǒng)一定會(huì)實(shí)時(shí)保存系統(tǒng)運(yùn)行過程中產(chǎn)生的異?;蚍钱惓P詳?shù)據(jù),用于記錄系統(tǒng)運(yùn)行過程產(chǎn)生的各種行為,作為日后發(fā)現(xiàn)問題、跟蹤問題并解決問題的一個(gè)很重要的依據(jù)。一般以輸出文件的形式保存,同時(shí)也可以選擇性的在控臺(tái)打印。日志處理,可謂是任何軟件開發(fā)過程中必不可少的一個(gè)環(huán)節(jié)。

在Android應(yīng)用開發(fā)階段,我們常常會(huì)使用系統(tǒng)提供的日志打印功能選擇性地在Logcat控制臺(tái)上打印一些數(shù)據(jù)信息,便于更加直觀地調(diào)試跟蹤應(yīng)用運(yùn)行的一個(gè)狀態(tài),常見如客戶端與服務(wù)器通訊過程中涉及到的URL鏈接、request請(qǐng)求參數(shù)和response響應(yīng)結(jié)果等。

但如果打印的message過長(zhǎng),比如接口響應(yīng)結(jié)果過大,將會(huì)導(dǎo)致Logcat控臺(tái)數(shù)據(jù)顯示不全。自打使用Log以來經(jīng)常遇到這個(gè)問題,之前也是沒太在意,畢竟message太長(zhǎng)的情況也是少見,偶爾遇到這種情況就通過Debug工具跟蹤調(diào)試,復(fù)制對(duì)應(yīng)response信息到bejson等其他輔助工具上格式化瀏覽,多少還是有點(diǎn)不方便。

后來經(jīng)過查詢才得知,Android系統(tǒng)的單條日志打印長(zhǎng)度是有限的,在底層Logger驅(qū)動(dòng)程序的一個(gè)類Logger.h頭文件中有如下兩行代碼:

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

可以看出,系統(tǒng)顯示單條Log信息的長(zhǎng)度是固定的,為4*1024個(gè)字符長(zhǎng)度!Logcat使用的liblog資源包也提到,使用Log打印的message有可能被log內(nèi)核驅(qū)動(dòng)縮短:

The message may have been truncated by the kernel log driver.

了解了其中的長(zhǎng)度限制,就好辦了。我們可以對(duì)Message做個(gè)長(zhǎng)度判斷,采取分段打印的辦法輸出日志信息,比如這樣做:

if(xml.length() > 4000) {
 for(int i=0;i<xml.length();i+=4000){
    if(i+4000<xml.length())
        Log.i("rescounter"+i,xml.substring(i, i+4000));
     else
        Log.i("rescounter"+i,xml.substring(i, xml.length()));
    }
} else
    Log.i("resinfo",xml);
}

參考地址:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,068評(píng)論 25 709
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,569評(píng)論 19 139
  • 在應(yīng)用程序中添加日志記錄總的來說基于三個(gè)目的:監(jiān)視代碼中變量的變化情況,周期性的記錄到文件中供其他應(yīng)用進(jìn)行統(tǒng)計(jì)分析...
    時(shí)待吾閱讀 5,222評(píng)論 1 13
  • 在應(yīng)用程序中添加日志記錄總的來說基于三個(gè)目的:監(jiān)視代碼中變量的變化情況,周期性的記錄到文件中供其他應(yīng)用進(jìn)行統(tǒng)計(jì)分析...
    時(shí)待吾閱讀 5,159評(píng)論 0 6
  • 在這個(gè)迷宮里 永遠(yuǎn)都找不到出口 也永遠(yuǎn)得不到解脫 千萬別這么想 你和其他人不一樣 但至少還真正活著 血為河肉為墻 ...
    糊成粥閱讀 216評(píng)論 10 4

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