コード例 #1
0
        /// <summary>
        /// Log the request and response.
        /// </summary>
        /// <param name="request"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        protected override async Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            string requestCid;
            string responseCid;

            if (this.isIncomingMessageHandler)
            {
                requestCid = AdoptCorrelationId(request.Headers);
            }
            else
            {
                requestCid = SetCorrelationId(request.Headers);
            }

            bool ignore =
                this.urlIgnorers != null &&
                this.urlIgnorers.Any(ignorer => request.RequestUri.ToString().IndexOf(ignorer, StringComparison.OrdinalIgnoreCase) >= 0);

            if (ignore)
            {
                return(await SendAndLogAsync(request, cancellationToken).ConfigureAwait(false));
            }

            string localMessageId     = Guid.NewGuid().ToString();
            string requestUriText     = request.RequestUri.ToString();
            string requestHeadersText = GetHeadersText(request.Headers);

            if (request.Content != null)
            {
                requestHeadersText =
                    String.Join(
                        Environment.NewLine,
                        requestHeadersText,
                        GetHeadersText(request.Content.Headers));
            }

            string requestBodyText = await GetBodyText(request.Content).ConfigureAwait(false);

            Log.Info(new CallerInfo(), logContext, "|| correlationId={0} || local.msgid={1} ||{2}{3}:: {4} {5}{6}{7}{8}{9}{10}$$END$$",
                     requestCid, localMessageId,
                     Environment.NewLine,
                     this.isIncomingMessageHandler ? "Incoming" : "Outgoing",
                     request.Method.ToString(),
                     requestUriText,
                     Environment.NewLine,
                     requestHeadersText,
                     Environment.NewLine,
                     requestBodyText,
                     Environment.NewLine);

            Stopwatch           stopwatch = Stopwatch.StartNew();
            HttpResponseMessage response  = await base.SendAsync(request, cancellationToken).ConfigureAwait(false);

            Log.Info(
                new CallerInfo(),
                logContext,
                "{0} HTTP request with Local id={1} took {2}ms.",
                this.isIncomingMessageHandler ? "Incoming" : "Outgoing",
                localMessageId,
                stopwatch.ElapsedMilliseconds);

            if (this.isIncomingMessageHandler)
            {
                responseCid = SetCorrelationId(response.Headers);
            }
            else
            {
                responseCid = AdoptCorrelationId(response.Headers);
            }

            this.WarnIfDifferent(requestCid, responseCid);

            HttpStatusCode statusCode = response.StatusCode;

            string responseUriText     = request.RequestUri.ToString();
            string responseHeadersText = GetHeadersText(response.Headers);

            if (response.Content != null)
            {
                responseHeadersText =
                    String.Join(
                        Environment.NewLine,
                        responseHeadersText,
                        GetHeadersText(response.Content.Headers));
            }

            string responseBodyText = await GetBodyText(response.Content).ConfigureAwait(false);

            Log.Info(new CallerInfo(), logContext, "|| correlationId={0} || statuscode={1} || local.msgid={2} ||{3}Response to {4}:: {5} {6}{7}{8} {9}{10}{11}{12}{13}{14}$$END$$",
                     CorrelationId.GetCurrentId(), statusCode, localMessageId,
                     Environment.NewLine,
                     this.isIncomingMessageHandler ? "incoming" : "outgoing",
                     request.Method.ToString(),
                     responseUriText,
                     Environment.NewLine,
                     ((int)response.StatusCode).ToString(),
                     response.StatusCode.ToString(),
                     Environment.NewLine,
                     responseHeadersText,
                     Environment.NewLine,
                     responseBodyText,
                     Environment.NewLine);

            return(response);
        }