func LogRequest()

in http/common/logging/logging.go [95:156]


func LogRequest(params LogRequestParams) {
    var method, service, reqURL string
    switch req := params.Request.(type) {
    case *http.Request:
        method = req.Method
        service = req.Host
        reqURL = req.URL.String()

    case *azcorePolicy.Request:
        method = req.Raw().Method
        service = req.Raw().Host
        reqURL = req.Raw().URL.String()
    default:
        return // Unknown request type, do nothing
    }

    parsedURL, parseErr := url.Parse(reqURL)
    if parseErr != nil {
        params.Logger.With(
            "source", "ApiRequestLog",
            "protocol", "REST",
            "method_type", "unary",
            "code", "na",
            "component", "client",
            "time_ms", "na",
            "method", method,
            "service", service,
            "url", reqURL,
            "error", parseErr.Error(),
        ).Error("error parsing request URL")
    } else {
        reqURL = TrimURL(*parsedURL)
    }

    methodInfo := GetMethodInfo(method, reqURL)
    latency := time.Since(params.StartTime).Milliseconds()

    var headers map[string]string
    if params.Response != nil {
        headers = extractHeaders(params.Response.Header)
    }

    logEntry := params.Logger.With(
        "source", "ApiRequestLog",
        "protocol", "REST",
        "method_type", "unary",
        "component", "client",
        "time_ms", latency,
        "method", methodInfo,
        "service", service,
        "url", reqURL,
        "headers", headers,
    )

    if params.Error != nil || params.Response == nil {
        logEntry.With("error", params.Error.Error(), "code", "na").Error("finished call")
    } else if 200 <= params.Response.StatusCode && params.Response.StatusCode < 300 {
        logEntry.With("error", "na", "code", params.Response.StatusCode).Info("finished call")
    } else {
        logEntry.With("error", params.Response.Status, "code", params.Response.StatusCode).Error("finished call")
    }
}