How can I log each request/response using Alamofire?

前端 未结 8 1437
迷失自我
迷失自我 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:27

    In Alamofire 5.0.0 I used the answer based on: https://github.com/Alamofire/Alamofire/issues/2867#issuecomment-509662892 but I had to replace DataResponse by AFDataResponse. For example:

    import Alamofire
    
    final class AlamofireLogger: EventMonitor {
    
        func requestDidResume(_ request: Request) {
    
            let allHeaders = request.request.flatMap { $0.allHTTPHeaderFields.map { $0.description } } ?? "None"
            let headers = """
            ⚡️⚡️⚡️⚡️ Request Started: \(request)
            ⚡️⚡️⚡️⚡️ Headers: \(allHeaders)
            """
            NSLog(headers)
    
    
            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(_ request: DataRequest, didParseResponse response: AFDataResponse) {
    
            NSLog("⚡️⚡️⚡️⚡️ Response Received: \(response.debugDescription)")
            NSLog("⚡️⚡️⚡️⚡️ Response All Headers: \(String(describing: response.response?.allHeaderFields))")
        }
    }
    

    And then you can use it in the following way:

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

    As it has explained by 0xced in an aforementioned post.

提交回复
热议问题