Skip to content

Commit 7310c9b

Browse files
committed
Added Logger interface & Simple Logger implementation
1 parent 813bba8 commit 7310c9b

5 files changed

Lines changed: 60 additions & 9 deletions

File tree

‎SpotifyAPI.Web.Tests/Http/APIConnectorTest.cs‎

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ public async Task RetryHandler_IsUsed()
4141
authenticator.Object,
4242
serializer.Object,
4343
httpClient.Object,
44-
retryHandler.Object
44+
retryHandler.Object,
45+
null
4546
);
4647
await apiConnector.SendAPIRequest<string>(new Uri("/me", UriKind.Relative), HttpMethod.Get);
4748

@@ -82,7 +83,8 @@ public async Task RetryHandler_CanRetry()
8283
authenticator.Object,
8384
serializer.Object,
8485
httpClient.Object,
85-
retryHandler.Object
86+
retryHandler.Object,
87+
null
8688
);
8789
await apiConnector.SendAPIRequest<string>(new Uri("/me", UriKind.Relative), HttpMethod.Get);
8890

‎SpotifyAPI.Web/Clients/SpotifyClientConfig.cs‎

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ public class SpotifyClientConfig
99
public IAuthenticator Authenticator { get; }
1010
public IJSONSerializer JSONSerializer { get; }
1111
public IHTTPClient HTTPClient { get; }
12+
public IHTTPLogger HTTPLogger { get; }
1213
public IRetryHandler RetryHandler { get; }
1314

1415
/// <summary>
@@ -21,19 +22,22 @@ public class SpotifyClientConfig
2122
/// <param name="jsonSerializer"></param>
2223
/// <param name="httpClient"></param>
2324
/// <param name="retryHandler"></param>
25+
/// <param name="httpLogger"></param>
2426
public SpotifyClientConfig(
2527
Uri baseAddress,
2628
IAuthenticator authenticator,
2729
IJSONSerializer jsonSerializer,
2830
IHTTPClient httpClient,
29-
IRetryHandler retryHandler
31+
IRetryHandler retryHandler,
32+
IHTTPLogger httpLogger
3033
)
3134
{
3235
BaseAddress = baseAddress;
3336
Authenticator = authenticator;
3437
JSONSerializer = jsonSerializer;
3538
HTTPClient = httpClient;
3639
RetryHandler = retryHandler;
40+
HTTPLogger = httpLogger;
3741
}
3842

3943
internal IAPIConnector CreateAPIConnector()
@@ -44,7 +48,7 @@ internal IAPIConnector CreateAPIConnector()
4448
Ensure.ArgumentNotNull(JSONSerializer, nameof(JSONSerializer));
4549
Ensure.ArgumentNotNull(HTTPClient, nameof(HTTPClient));
4650

47-
return new APIConnector(BaseAddress, Authenticator, JSONSerializer, HTTPClient, RetryHandler);
51+
return new APIConnector(BaseAddress, Authenticator, JSONSerializer, HTTPClient, RetryHandler, HTTPLogger);
4852
}
4953

5054
public SpotifyClientConfig WithToken(string token, string tokenType = "Bearer")
@@ -56,12 +60,17 @@ public SpotifyClientConfig WithToken(string token, string tokenType = "Bearer")
5660

5761
public SpotifyClientConfig WithRetryHandler(IRetryHandler retryHandler)
5862
{
59-
return new SpotifyClientConfig(BaseAddress, Authenticator, JSONSerializer, HTTPClient, retryHandler);
63+
return new SpotifyClientConfig(BaseAddress, Authenticator, JSONSerializer, HTTPClient, retryHandler, HTTPLogger);
6064
}
6165

6266
public SpotifyClientConfig WithAuthenticator(IAuthenticator authenticator)
6367
{
64-
return new SpotifyClientConfig(BaseAddress, authenticator, JSONSerializer, HTTPClient, RetryHandler);
68+
return new SpotifyClientConfig(BaseAddress, authenticator, JSONSerializer, HTTPClient, RetryHandler, HTTPLogger);
69+
}
70+
71+
public SpotifyClientConfig WithHTTPLogger(IHTTPLogger httpLogger)
72+
{
73+
return new SpotifyClientConfig(BaseAddress, Authenticator, JSONSerializer, HTTPClient, RetryHandler, httpLogger);
6574
}
6675

6776
public static SpotifyClientConfig CreateDefault(string token, string tokenType = "Bearer")
@@ -87,6 +96,7 @@ public static SpotifyClientConfig CreateDefault(IAuthenticator authenticator)
8796
authenticator,
8897
new NewtonsoftJSONSerializer(),
8998
new NetHttpClient(),
99+
null,
90100
null
91101
);
92102
}

‎SpotifyAPI.Web/Http/APIConnector.cs‎

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,22 +13,25 @@ public class APIConnector : IAPIConnector
1313
private readonly IJSONSerializer _jsonSerializer;
1414
private readonly IHTTPClient _httpClient;
1515
private readonly IRetryHandler _retryHandler;
16+
private readonly IHTTPLogger _httpLogger;
1617

1718
public APIConnector(Uri baseAddress, IAuthenticator authenticator) :
18-
this(baseAddress, authenticator, new NewtonsoftJSONSerializer(), new NetHttpClient(), null)
19+
this(baseAddress, authenticator, new NewtonsoftJSONSerializer(), new NetHttpClient(), null, null)
1920
{ }
2021
public APIConnector(
2122
Uri baseAddress,
2223
IAuthenticator authenticator,
2324
IJSONSerializer jsonSerializer,
2425
IHTTPClient httpClient,
25-
IRetryHandler retryHandler)
26+
IRetryHandler retryHandler,
27+
IHTTPLogger httpLogger)
2628
{
2729
_baseAddress = baseAddress;
2830
_authenticator = authenticator;
2931
_jsonSerializer = jsonSerializer;
3032
_httpClient = httpClient;
3133
_retryHandler = retryHandler;
34+
_httpLogger = httpLogger;
3235
}
3336

3437
public Task<T> Delete<T>(Uri uri)
@@ -159,13 +162,17 @@ private async Task<IAPIResponse<T>> DoSerializedRequest<T>(IRequest request)
159162
private async Task<IResponse> DoRequest(IRequest request)
160163
{
161164
await _authenticator.Apply(request).ConfigureAwait(false);
165+
_httpLogger?.OnRequest(request);
162166
IResponse response = await _httpClient.DoRequest(request).ConfigureAwait(false);
167+
_httpLogger?.OnResponse(response);
163168
if (_retryHandler != null)
164169
{
165170
response = await _retryHandler?.HandleRetry(request, response, async (newRequest) =>
166171
{
167172
await _authenticator.Apply(newRequest).ConfigureAwait(false);
168-
return await _httpClient.DoRequest(request).ConfigureAwait(false);
173+
var newResponse = await _httpClient.DoRequest(request).ConfigureAwait(false);
174+
_httpLogger?.OnResponse(newResponse);
175+
return newResponse;
169176
});
170177
}
171178
ProcessErrors(response);
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
namespace SpotifyAPI.Web.Http
2+
{
3+
public interface IHTTPLogger
4+
{
5+
void OnRequest(IRequest request);
6+
void OnResponse(IResponse response);
7+
}
8+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
using System.Linq;
2+
using System;
3+
4+
namespace SpotifyAPI.Web.Http
5+
{
6+
public class SimpleHTTPLogger : IHTTPLogger
7+
{
8+
public void OnRequest(IRequest request)
9+
{
10+
string parameters = null;
11+
if (request.Parameters != null)
12+
{
13+
parameters = string.Join(",", request.Parameters?.Select(kv => kv.Key + "=" + kv.Value).ToArray());
14+
}
15+
Console.WriteLine("\n{0} {1} [{2}] {3}", request.Method, request.Endpoint, parameters, request.Body);
16+
}
17+
18+
public void OnResponse(IResponse response)
19+
{
20+
string body = response.Body?.ToString().Substring(0, 50).Replace("\n", "");
21+
Console.WriteLine("--> {0} {1} {2}\n", response.StatusCode, response.ContentType, body);
22+
}
23+
}
24+
}

0 commit comments

Comments
 (0)