2014-11-04 120 views

回答

31

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

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()方法,以便对每要求输出打印。

注意事项:我没有亲自测试过这个代码,并且可能会在生产中做出不同的选择。这只是显示Wenderlich教程代码如何包含调试日志记录。另请注意:由于本教程是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) 
    }) 
    } 
} 
+1

真棒,谢谢!你可以发布你想要的responseObject扩展的代码吗? – trauzti 2015-06-19 16:08:02

+2

顺便说一下,这段代码不适用于Alamofire 3 :) – 2015-12-31 02:11:15

+0

现在还没有时间重新访问这个,@MatthieuRiegler。小心提供与v3兼容的写入? :) – clozach 2016-01-14 01:31:41

9

Timberjack是你在找什么。 Timberjack是一款简单,不受侵入的网络活动记录器。记录您的应用所做的每个请求,或者仅限于那些使用特定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 
}() 
} 
+0

你如何限制它到一个NSURLSession? – micap 2016-05-04 01:50:35

0

添加到上面的回答 为Alamofire 4。0+斯威夫特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()你回到之前的任何地方自我

13

有一个甜美的小豆荚为此:https://github.com/konkab/AlamofireNetworkActivityLogger

将其添加到您的朋友文件:

pod 'AlamofireNetworkActivityLogger', '~> 2.0' 

在你的AppDelegate:在生产这种 其实我已经遇到崩溃:

import AlamofireNetworkActivityLogger 
didFinishLaunchingWithOptions

然后,补充一点:

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

编辑。为了安全起见,用“打造标志”只使用这个调试,像这样:

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

这是最好的选择,因为它不需要对现有代码进行任何更改。 – manmal 2017-08-22 10:28:39

+0

不适用于迦太基 – PerrierCitror 2017-10-30 12:50:33

-1

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

For Printing Response。使用以下扩展名。

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