精彩文章免费看

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;