如何使用Alamofirelogging每个请求/响应?

有没有办法使用Alamofirelogging每个请求/响应(类似于AFNetworkActivityLogger)?

我知道Printable,DebugPrintable和Output(cURL),但他们不是我正在寻找的。

像这样的东西可能是你正在寻找的东西:

extension Request { public func debugLog() -> Self { #if DEBUG debugPrint(self) #endif return self } } 

用法:

 Alamofire.request(.GET, "http://httpbin.org/get", parameters: ["foo": "bar"]) .debugLog() .response {…} 

如果你想打印所有的响应,你可以编写你自己的响应方法,类似于本教程顶部的responseObject()方法:

http://www.raywenderlich.com/87595/intermediate-alamofire-tutorial

[更新:根据@trauzti的请求添加到下面。]

以下是如何使用responseObject()方法来打印每个请求的输出。

警告:我没有亲自testing过这个代码,可能会在生产中做出不同的select。 这只是显示Wenderlich教程代码如何包含debugging日志logging。 另外请注意:由于本教程是Swift 2.0之前版本,因此我使用了旧的println()而不是print()。

 @objc public protocol ResponseObjectSerializable { init(response: NSHTTPURLResponse, representation: AnyObject) } extension Alamofire.Request { public func responseObject<T: ResponseObjectSerializable>(completionHandler: (NSURLRequest, NSHTTPURLResponse?, T?, NSError?) -> Void) -> Self { let serializer: Serializer = { (request, response, data) in #if DEBUG println("Request: \(request.URL)") #endif let JSONSerializer = Request.JSONResponseSerializer(options: .AllowFragments) let (JSON: AnyObject?, serializationError) = JSONSerializer(request, response, data) if response != nil && JSON != nil { #if DEBUG println("Response:") debugPrint(JSON) #endif return (T(response: response!, representation: JSON!), nil) } else { #if DEBUG println("Failed Serialization:") debugPrint(serializationError) #endif return (nil, serializationError) } } return response(serializer: serializer, completionHandler: { (request, response, object, error) in completionHandler(request, response, object as? T, error) }) } } 

Timberjack就是你正在寻找的东西。 Timberjack是一个简单的,非侵入性的networking活动logging器。 logging你的应用程序所做的每一个请求,或者只限于那些使用某个NSURLSession的用户,如果你愿意的话。 它也适用于Alamofire,如果这是你的事情。

https://cocoapods.org/pods/Timberjack

用法:

 import Alamofire import Timberjack class HTTPManager: Alamofire.Manager { static let sharedManager: HTTPManager = { let configuration = Timberjack.defaultSessionConfiguration() let manager = HTTPManager(configuration: configuration) return manager }() } 

有一个可爱的小豆荚: https : //github.com/konkab/AlamofireNetworkActivityLogger

将此添加到您的podfile中:

 pod 'AlamofireNetworkActivityLogger', '~> 2.0' 

在你的AppDelegate中:

 import AlamofireNetworkActivityLogger 

然后在你的didFinishLaunchingWithOptions中添加这个:

 NetworkActivityLogger.shared.level = .debug NetworkActivityLogger.shared.startLogging() 

编辑:我实际上在生产中遇到这种崩溃。 为了安全起见,使用“构build标志”只能在debugging中使用,如下所示:

 #if DEBUG NetworkActivityLogger.shared.level = .debug NetworkActivityLogger.shared.startLogging() #endif 

为Alamofire 4.0 + Swift 3添加上面的答案

 extension DataRequest { public func LogRequest() -> Self { //Your logic for logging return self } } 

请求时

 Alamofire.request(requestUrl, method: .post, parameters: parameter, encoding: JSONEncoding.default) .LogRequest() .responseJSON { response in //Do your thing } 

如果你想在任何情况下取消请求(这是我想要的),你可以self.cancel()任何地方之前,你回自己

解决scheme为SWIFT 3.0+

对于打印请求参数和标题:

 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() 

打印响应 。 使用以下扩展名。

 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 } } 

小要点: https : //gist.github.com/manishpathak99/348f2eb0167c0ff6e12ecd667612bc9b/edit