protected override async Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            ExchangeId exchangeId = ExchangeId.NewExchangeId();

            if (StoreExchangeId)
            {
                request.Properties[ExchangeIdPropertyKey] = exchangeId;
            }

            await _logger.LogAsync(exchangeId, request, cancellationToken).ConfigureAwait(false);

            HttpResponseMessage response;

            try
            {
                response = await base.SendAsync(request, cancellationToken).ConfigureAwait(false);
            }
            catch (Exception e)
            {
                await _logger.LogAsync(exchangeId, e, cancellationToken).ConfigureAwait(false);

                throw;
            }

            await _logger.LogAsync(exchangeId, response, cancellationToken).ConfigureAwait(false);

            return(response);
        }