iOS NSLog 打印完整的JSON字符串
前言
在封装网络请求框架时,打印请求结果发现日志输出不全,到一定的字符就会被截断
开始猜测NSLog是否日志输出有字符上限
NSLog(@"【请求结果】: \n%@", obj);
实际只能输出大约1000左右的字符,尤其是转成JSON字符串之后,只能显示很少的一部分
NSLog(@"%@", [obj debugDescription]);
输出结果多了不少,但是在数据量大的时候仍然展示不全
NSLog(@"%s", [obj debugDescription].UTF8String);
这种方式打印结果与第二种差不多,同样的位置截断,日志末尾会有<…>
省略符号
应该是NSLog日志显示长度达到上限了,做的折中处理
查看资料有说用printf
#define NSLog(format,...) printf("%s",[[NSString stringWithFormat:(format), ##__VA_ARGS__] UTF8String])
这种方式可以输出完整的字符串,但是毕竟是整个替换了NSLog
,少了原本NSLog
宏的一些内置定义,导致日志结构不美观,需要自己补充
不过即便如此,第二种和第三种依然可以显示相当长的字符串内容,对于一般的列表JSON数据完全足够,如果真的需要显示大量数据可以尝试第四种方式
关于OC的一些预处理宏,这些都能很好的帮助我们完善日志内容
Macro
Format Specifier
Description
NSString *logString;
@try {
logString = [[NSString alloc] initWithData:[NSJSONSerialization dataWithJSONObject:self options:NSJSONWritingPrettyPrinted error:nil] encoding:NSUTF8StringEncoding];
// 处理\/转义字符
logString = [logString stringByReplacingOccurrencesOfString:@"\\/" withString:@"/"];
} @catch (NSException *exception) {
logString = self.description;
} @finally {
return logString;