...

Source file src/edge-infra.dev/pkg/lib/fog/middleware.go

Documentation: edge-infra.dev/pkg/lib/fog

     1  package fog
     2  
     3  import (
     4  	"errors"
     5  	"fmt"
     6  	"net/http"
     7  
     8  	"github.com/go-logr/logr"
     9  )
    10  
    11  // MiddlewareLogger is middleware that decorates a logger with an operation ID as well as http requests and response information
    12  // it adds response body information if the response status is greater than 400
    13  func MiddlewareLogger(l logr.Logger, middlewareContext *MiddlewareContext) {
    14  	r := middlewareContext.Request
    15  	status := middlewareContext.Status
    16  	logmsg := fmt.Sprintf("%s %s %d %s", r.Method, r.URL.Path, status, http.StatusText(status))
    17  	l.WithValues(
    18  		"httpRequest", map[string]interface{}{
    19  			"requestMethod": r.Method,
    20  			"requestUrl":    r.RequestURI,
    21  			"status":        status,
    22  			"bytes":         middlewareContext.Size,
    23  			"elapsed":       middlewareContext.Time.Microseconds(),
    24  		},
    25  		SeverityKey, levelSeverity(status),
    26  	)
    27  
    28  	if status > 400 {
    29  		l.WithValues("httpResponse", map[string]interface{}{
    30  			"body": middlewareContext.Body.String(),
    31  		})
    32  	}
    33  	if status < 500 {
    34  		l.Info(logmsg)
    35  	} else {
    36  		l.Error(errors.New(http.StatusText(status)), logmsg)
    37  	}
    38  }
    39  
    40  // Maps httpStatus to Google cloud log level names
    41  func levelSeverity(status int) string {
    42  	switch {
    43  	case status <= 0:
    44  		return Warning
    45  	case status < 400: //for codes in 100s, 200s, 300s
    46  		return Info
    47  	case status >= 400 && status < 500:
    48  		return Warning
    49  	case status >= 500:
    50  		return Error
    51  	default:
    52  		return Info
    53  	}
    54  }
    55  

View as plain text