How can I log each request/response using Alamofire?

前端 未结 8 1399
迷失自我
迷失自我 2020-12-23 16:20

Is there a way to log each request / response using Alamofire (something similar to AFNetworkActivityLogger) ?

I am aware of Printable, DebugPrintable and Output (cU

相关标签:
8条回答
  • 2020-12-23 16:31

    Since Alamofire 5, the easiest way is to define an EventMonitor subclass:

    final class AlamofireLogger: EventMonitor {
        func requestDidResume(_ request: Request) {
            let body = request.request.flatMap { $0.httpBody.map { String(decoding: $0, as: UTF8.self) } } ?? "None"
            let message = """
            ⚡️ Request Started: \(request)
            ⚡️ Body Data: \(body)
            """
            NSLog(message)
        }
    
        func request<Value>(_ request: DataRequest, didParseResponse response: DataResponse<Value>) {
            NSLog("⚡️ Response Received: \(response.debugDescription)")
        }
    }
    

    Then use it on your session:

    let session = Session(eventMonitors: [ AlamofireLogger() ])
    

    This sample code was adapted from https://github.com/Alamofire/Alamofire/issues/2867#issuecomment-509662892

    0 讨论(0)
  • 2020-12-23 16:48

    SOLUTION FOR SWIFT 3.0+

    For Printing Request parameter and headers:

    Alamofire.request(url, method: .get, parameters: parameters, headers: headers)
                .validate()
                .responseObject { (response: DataResponse<T>) in
                    self.pendingRequests.removeValue(forKey: endPoint)
                    completion!(response)
    
                    if(NetworkConfig.loggingEnable) {
                        debugPrint("************* printing REQUEST parameter and Headers *************")
                        debugPrint("RESPONSE : \(response.debugDescription)")
                    }
            }.responseDebugPrint()
    

    For Printing Response . use below extension .

    import Foundation
    import Alamofire
    
    extension Alamofire.DataRequest {
        func responseDebugPrint() -> Self {
            if NetworkConfig.loggingEnable {
    
                return responseJSON() {
                    response in
                    if let  JSON = response.result.value,
                        let JSONData = try? JSONSerialization.data(withJSONObject: JSON, options: .prettyPrinted),
                        let prettyString = NSString(data: JSONData, encoding: String.Encoding.utf8.rawValue) {
                        print(prettyString)
                    } else if let error = response.result.error {
                        print("Error Debug Print: \(error.localizedDescription)")
                    }
                }
            }
            return self
        }
    }
    

    Small gist for you : https://gist.github.com/manishpathak99/348f2eb0167c0ff6e12ecd667612bc9b/edit

    0 讨论(0)
提交回复
热议问题