public static void LogRequest()

in src/Middleware/Http/Common/Logging.cs [62:178]


    public static void LogRequest(LogRequestParams parameters)
    {
        if (parameters == null) throw new ArgumentNullException(nameof(parameters));

        string method = string.Empty;
        string service = string.Empty;
        string requestUri = string.Empty;
        string component = string.Empty;

        switch (parameters.Request)
        {
            case HttpRequestMessage httpRequest:
                method = httpRequest.Method.Method;
                service = httpRequest.RequestUri?.Host ?? "unknown";
                requestUri = httpRequest.RequestUri?.ToString() ?? "unknown";
                component = "client";
                break;

            case Request azcoreRequest:
                method = azcoreRequest.Method.Method;
                service = azcoreRequest.Uri.Host?? "unknown";
                requestUri = azcoreRequest.Uri.ToString()?? "unknown";
                component = "client";
                break;
            
            case HttpRequest httpRequest:
                method = httpRequest.Method;
                service = httpRequest.Host.ToString();
                requestUri = $"{httpRequest.Scheme}://{service}{httpRequest.Path}{httpRequest.QueryString}";
                component = "server";
                break;

            default:
                return; // Unknown request type, do nothing
        }

        Uri parsedUri;
        try
        {
            parsedUri = new Uri(requestUri);
        }
        catch (UriFormatException ex)
        {
            parameters.Logger.ForContext("source", "ApiRequestLog")
                .ForContext("protocol", "REST")
                .ForContext("method_type", "unary")
                .ForContext("code", "na")
                .ForContext("component", component)
                .ForContext("time_ms", "na")
                .ForContext("method", method)
                .ForContext("service", service)
                .ForContext("url", requestUri)
                .ForContext("error", ex.Message)
                .Error("Error parsing request URL");
            return;
        }

        string trimmedUri = TrimUrl(parsedUri);

        string methodInfo = GetMethodInfo(method, trimmedUri);
        double latency = (DateTime.UtcNow - parameters.StartTime).TotalMilliseconds;

        var logEntry = parameters.Logger.ForContext("source", "ApiRequestLog")
            .ForContext("protocol", "REST")
            .ForContext("method_type", "unary")
            .ForContext("component", component)
            .ForContext("time_ms", latency)
            .ForContext("method", methodInfo)
            .ForContext("service", service)
            .ForContext("url", trimmedUri);

        if (parameters.Error != null || parameters.Response == null)
        {
            logEntry.ForContext("error", parameters.Error?.Message ?? "unknown error")
                    .ForContext("code", "na")
                    .Error("Finished call");
        }
        else
        {
            int statusCode;
            string? reasonPhrase;

            if (parameters.Response is HttpResponseMessage httpResponse)
            {
                statusCode = (int)httpResponse.StatusCode;
                reasonPhrase = httpResponse.ReasonPhrase?? "unknown";
            }
            else if (parameters.Response is Azure.Response azureResponse)
            {
                statusCode = azureResponse.Status;
                reasonPhrase = azureResponse.ReasonPhrase;
            }
            else if (parameters.Response is HttpResponse restHttpResponse)
            {
                statusCode = restHttpResponse.StatusCode;
                reasonPhrase = null; // ReasonPhrase is not available in HttpResponse
            }
            else
            {
                statusCode = 0;
                reasonPhrase = "unknown";
            }

            if (statusCode >= 200 && statusCode < 300)
            {
                logEntry.ForContext("error", "na")
                        .ForContext("code", statusCode)
                        .Information("finished call");
            }
            else
            {
                logEntry.ForContext("error", reasonPhrase ?? "Unknown error")
                        .ForContext("code", statusCode)
                        .Error("finished call");
            }
        }
    }