From 14bcf19ba8122405b8267ad7fc5ea41e6cdfe8b5 Mon Sep 17 00:00:00 2001 From: Matthias Langhard Date: Tue, 15 Jun 2021 11:58:40 +0200 Subject: [PATCH] chore: implements Debug Logging for request and response including body --- src/Extensions/PaymoApiExtensions.cs | 6 +++- src/Shared/LoggingHandler.cs | 45 ++++++++++++++++++++++++++++ tests/DependencyFactory.cs | 3 +- 3 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 src/Shared/LoggingHandler.cs diff --git a/src/Extensions/PaymoApiExtensions.cs b/src/Extensions/PaymoApiExtensions.cs index 2b97710..a647b7e 100644 --- a/src/Extensions/PaymoApiExtensions.cs +++ b/src/Extensions/PaymoApiExtensions.cs @@ -17,7 +17,8 @@ namespace Novaloop.PaymoApi.Extensions { services.Configure(options); var resolvedOptions = (IOptions) services.BuildServiceProvider().GetService(typeof(IOptions)); - services.AddHttpClient(client => { client.BaseAddress = new Uri(resolvedOptions.Value.BaseUrl); }); + services.AddHttpClient(client => { client.BaseAddress = new Uri(resolvedOptions.Value.BaseUrl); }) + .AddHttpMessageHandler(s => s.GetService()); // ClientContacts services.AddTransient, BaseApi>(); @@ -31,6 +32,9 @@ namespace Novaloop.PaymoApi.Extensions services.AddTransient, BaseApi>(); services.AddTransient(); + // Shared + services.AddTransient(); + return services; } } diff --git a/src/Shared/LoggingHandler.cs b/src/Shared/LoggingHandler.cs new file mode 100644 index 0000000..7015757 --- /dev/null +++ b/src/Shared/LoggingHandler.cs @@ -0,0 +1,45 @@ +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; + +namespace Novaloop.PaymoApi.Shared +{ + public class LoggingHandler : DelegatingHandler + { + private readonly ILogger _logger; + + public LoggingHandler(ILogger logger) + { + _logger = logger; + } + + public LoggingHandler(HttpMessageHandler innerHandler, ILogger logger) + : base(innerHandler) + { + _logger = logger; + } + + + protected override async Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) + { + _logger.LogDebug($"Request:\n{request}"); + if (request.Content != null) + { + var body = await request.Content.ReadAsStringAsync(); + _logger.LogDebug(body); + } + + var response = await base.SendAsync(request, cancellationToken); + + _logger.LogDebug($"Response:\n{response}"); + if (response.Content != null) + { + var body = await response.Content.ReadAsStringAsync(); + _logger.LogDebug(body); + } + + return response; + } + } +} \ No newline at end of file diff --git a/tests/DependencyFactory.cs b/tests/DependencyFactory.cs index a93fe9a..ff9a69a 100644 --- a/tests/DependencyFactory.cs +++ b/tests/DependencyFactory.cs @@ -1,6 +1,7 @@ using System; using System.Net.Http; using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Options; using Novaloop.PaymoApi.Extensions; using Novaloop.PaymoApi.Shared; @@ -11,7 +12,7 @@ namespace Novaloop.PaymoApi.Tests { public static ApiClient GeneratePaymoApiClient() { - return new ApiClient(new HttpClient {BaseAddress = new Uri("https://app.paymoapp.com/")}); + return new ApiClient(new HttpClient(new LoggingHandler(new HttpClientHandler(), new NullLogger())) {BaseAddress = new Uri("https://app.paymoapp.com/")}); } public static IOptions GenerateOptions()