iOS NSLog 打印完整的JSON字符串

2020-03-10  本文已影响0人  ZT_Story

前言

在封装网络请求框架时,打印请求结果发现日志输出不全,到一定的字符就会被截断
开始猜测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;
上一篇下一篇

猜你喜欢

热点阅读