前言
在封装网络请求框架时,打印请求结果发现日志输出不全,到一定的字符就会被截断
开始猜测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 |
---|---|---|
__func__ |
%s | 打印当前函数名 |
__LINE__ |
%d | 行号 |
__FILE__ |
%s | 文件完整路径 |
附格式化NSDictionary与NSArray的方法
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;
网友评论