using Minio.DataModel.Result; using Minio.DataModel.Tracing; namespace Minio; public static class LoggingExtensions { /// /// Logs the request sent to server and corresponding response /// /// /// /// /// internal static void LogRequest(this IMinioClient minioClient, HttpRequestMessage request, ResponseResult response, double durationMs) { var requestToLog = new RequestToLog { Resource = request.RequestUri.PathAndQuery, // Parameters are custom anonymous objects in order to have the parameter type as a nice string // otherwise it will just show the enum value Parameters = request.Headers.Select(parameter => new RequestParameter { Name = parameter.Key, Value = parameter.Value, Type = typeof(KeyValuePair>).ToString() }), // ToString() here to have the method as a nice string otherwise it will just show the enum value Method = request.Method.ToString(), // This will generate the actual Uri used in the request Uri = request.RequestUri }; var responseToLog = new ResponseToLog { StatusCode = response.StatusCode, Content = response.Content, Headers = response.Headers.ToDictionary(o => o.Key, o => string.Join(Environment.NewLine, o.Value), StringComparer.Ordinal), // The Uri that actually responded (could be different from the requestUri if a redirection occurred) ResponseUri = response.Request.RequestUri, ErrorMessage = response.ErrorMessage, DurationMs = durationMs }; minioClient.RequestLogger.LogRequest(requestToLog, responseToLog, durationMs); } }