AFNetworking 3.0 Extension for Network Request Logging
AFNetworkActivityLogger
is an extension for AFNetworking 3.0 that logs network requests as they are sent and received.
AFNetworkActivityLogger
listensAFNetworkingTaskDidStartNotification
andAFNetworkingTaskDidFinishNotification
notifications, which are posted by AFNetworking as session tasks are started and finish. For further customization of logging output, users are encouraged to implement desired functionality by creating new objects that conform toAFNetworkActivityLoggerProtocol
.
3.0.0 featured the following breaking API changes:
level
property is now found on the individual unique loggers, rather than the shared logger. This allows for more advanced customization options for logging level.filterPredicate
property is now found on the individual unique loggers, rather than the shared logger. This allows for more advanced customization options for logging specific requests.Add the following code to AppDelegate.m -application:didFinishLaunchingWithOptions:
:
[[AFNetworkActivityLogger sharedLogger] startLogging];
Now all NSURLSessionTask
objects created by an AFURLSessionManager
will have their request and response logged to the console, a la:
GET http://example.com/foo/bar.json
200 http://example.com/foo/bar.json [0.1860 s]
If the default logging level is too verbose—say, if you only want to know when requests fail—then changing it is as simple as:
[[AFNetworkActivityLogger sharedLogger] setLevel:AFLoggerLevelError];
By default, the shared logger is configured with an AFNetworkActivityConsoleLogger
with a debug level set to AFLoggerLevelInfo
. To change the level, simply access the logger through the loggers
property, and adjust the level. The following levels are provided:
AFLoggerLevelOff
: Do not log requests or responses.AFLoggerLevelDebug
:Logs HTTP method, URL, header fields, & request body for requests, and status code, URL, header fields, response string, & elapsed time for responses.AFLoggerLevelInfo
: Logs HTTP method & URL for requests, and status code, URL, & elapsed time for responses.AFLoggerLevelError
: Logs HTTP method & URL for requests, and status code, URL, & elapsed time for responses, but only for failed requests.To limit the requests that are logged by a unique logger, each object that conforms to AFNetworkActivityLoggerProtocol
has a filterPredicate
property. If the predicate returns true, the request will not be forwarded to the logger. For example, a custom file logger could be created that only logs requests for http://httpbin.org
, while a console logger could be used to log all errors in the application.
AFNetworkActivityConsoleLogger *testLogger = [AFNetworkActivityConsoleLogger new];
NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(NSURLRequest * _Nonnull request, NSDictionary<NSString *,id> * _Nullable bindings) {
return !([[request URL] baseURL] isEqualToString:@"httpbin.org"])
}];
[testLogger setFilterPredicate:predicate];
By default, the shared logger is configured with an AFNetworkActivityConsoleLogger
.
To create a custom logger, create a new object that conforms to AFNetworkActivityLoggerProtocol
, and add it to the shared logger. Be sure and configure the proper default logging level.
AFNetworkActivityLogger is available under the MIT license. See the LICENSE file for more info.