前言
在封裝網(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;