private async Task LogRequest(HttpRequestResponseLoggingOptions httpRequestResponseLoggingOptions, HttpRequest request) { var requestOptions = httpRequestResponseLoggingOptions.Request ?? new HttpRequestResponseOptions(); if (!requestOptions.IsEnabled) { return; } request.EnableBuffering(); await using var requestStream = _recyclableMemoryStreamManager.GetStream(); await request.Body.CopyToAsync(requestStream); var stringBuilder = CreateStringBuilder("Http Request Information..."); var @params = CreateParams(request); if (requestOptions.IncludeHeaders) { stringBuilder.AppendLine("Headers: {headers}"); @params.Add(request.Headers.ToImmutableArray()); } if (requestOptions.IncludeBody) { stringBuilder.AppendLine("Request Body: {requestBody}"); @params.Add(ReadStreamInChunks(requestStream)); } _logger.LogInformation(stringBuilder.ToString(), @params.ToArray()); request.Body.Position = 0; }
private async Task LogResponse(HttpRequestResponseLoggingOptions httpRequestResponseLoggingOptions, HttpContext context) { var responseOptions = httpRequestResponseLoggingOptions.Response ?? new HttpRequestResponseOptions(); if (!responseOptions.IsEnabled) { await _next(context); return; } var response = context.Response; var bodyStream = response.Body; await using var responseStream = _recyclableMemoryStreamManager.GetStream(); response.Body = responseStream; await _next(context); response.Body.Seek(0, SeekOrigin.Begin); var responseText = await new StreamReader(response.Body).ReadToEndAsync(); response.Body.Seek(0, SeekOrigin.Begin); var stringBuilder = CreateStringBuilder("Http Response Information..."); var @params = CreateParams(context.Request); if (responseOptions.IncludeHeaders) { stringBuilder.AppendLine("Headers: {headers}"); @params.Add(response.Headers.ToImmutableArray()); } if (responseOptions.IncludeBody) { stringBuilder.AppendLine("Response Body: {text}"); @params.Add(responseText); } _logger.LogInformation(stringBuilder.ToString(), @params.ToArray()); await responseStream.CopyToAsync(bodyStream); }