IOS/iOS

[iOS] PrettyPrintJson, Print Log Debugging 을 편하게 하자

URLSession을 사용할때 JSON데이터를 print하면 Postman에서의 출력과는 다르게 한줄로 보기 힘들게 출력됩니다  

extension Data {
    var prettyJson: String? {
        guard let object = try? JSONSerialization.jsonObject(with: self, options: []),
              let data = try? JSONSerialization.data(withJSONObject: object, options: [.prettyPrinted]),
              let prettyPrintedString = String(data: data, encoding:.utf8) else { return nil }

        return prettyPrintedString
    }
}

다음과 같이 Data에 Extension을 사용하여 로그출력을 포스트맨과 같이 보기편하게 볼수 있습니다. 

 

Print를 사용하면 해당 데이터만 로그에 출력됩니다 

public func Log<T>(_ object: T?, filename: String = #file, line: Int = #line, funcName: String = #function) {
    #if !Release
    if let obj = object {
        print("\(Date()) \(filename.components(separatedBy: "/").last ?? "")(\(line)) : \(funcName) : \(obj)")
    } else {
        print("\(Date()) \(filename.components(separatedBy: "/").last ?? "")(\(line)) : \(funcName) : nil")
    }
    #endif
}

위의 메서드를 사용하면 메서드가 호출된 파일, 라인, 메서드 이름도 함께 출력되서 위치를 빠르게 파악할수 있습니다
#if !Releas는 현재상태가 Releas를 빌드하는 것이면 로그를 출력되지 않게 해줍니다