iOS NSLog 打印完整的JSON字符串

前言

在封裝網(wǎng)絡(luò)請求框架時,打印請求結(jié)果發(fā)現(xiàn)日志輸出不全,到一定的字符就會被截斷
開始猜測NSLog是否日志輸出有字符上限

嘗試

NSLog(@"【請求結(jié)果】: \n%@", obj);

實(shí)際只能輸出大約1000左右的字符,尤其是轉(zhuǎn)成JSON字符串之后,只能顯示很少的一部分

NSLog(@"%@", [obj debugDescription]);

輸出結(jié)果多了不少,但是在數(shù)據(jù)量大的時候仍然展示不全

NSLog(@"%s", [obj debugDescription].UTF8String);

這種方式打印結(jié)果與第二種差不多,同樣的位置截斷,日志末尾會有<…>省略符號
應(yīng)該是NSLog日志顯示長度達(dá)到上限了,做的折中處理


查看資料有說用printf

#define NSLog(format,...) printf("%s",[[NSString stringWithFormat:(format), ##__VA_ARGS__] UTF8String])

這種方式可以輸出完整的字符串,但是畢竟是整個替換了NSLog,少了原本NSLog宏的一些內(nèi)置定義,導(dǎo)致日志結(jié)構(gòu)不美觀,需要自己補(bǔ)充

總結(jié)

不過即便如此,第二種和第三種依然可以顯示相當(dāng)長的字符串內(nèi)容,對于一般的列表JSON數(shù)據(jù)完全足夠,如果真的需要顯示大量數(shù)據(jù)可以嘗試第四種方式

補(bǔ)充

關(guān)于OC的一些預(yù)處理宏,這些都能很好的幫助我們完善日志內(nèi)容

Macro Format Specifier Description
__func__ %s 打印當(dāng)前函數(shù)名
__LINE__ %d 行號
__FILE__ %s 文件完整路徑

附格式化NSDictionary與NSArray的方法

    NSString *logString;
    @try {
        logString = [[NSString alloc] initWithData:[NSJSONSerialization dataWithJSONObject:self options:NSJSONWritingPrettyPrinted error:nil] encoding:NSUTF8StringEncoding];
        // 處理\/轉(zhuǎn)義字符
        logString = [logString stringByReplacingOccurrencesOfString:@"\\/" withString:@"/"]; 
    } @catch (NSException *exception) {
        logString = self.description;
    } @finally {
        
    }
    return  logString;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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