polycule-connect/polyculeconnect/middlewares/logger.go
Melora Hugues c2cc95c238
All checks were successful
continuous-integration/drone/push Build is passing
Add first basic POC
2023-10-14 18:17:55 +02:00

39 lines
1 KiB
Go

package middlewares
import (
"net"
"net/http"
"time"
"git.faercol.me/faercol/polyculeconnect/polyculeconnect/helpers"
"github.com/sirupsen/logrus"
)
var defaultResponseInfo = helpers.ResponseInfo{
ReturnCode: -1,
ContentLength: -1,
}
type LoggerMiddleware struct {
l *logrus.Logger
}
func (lm *LoggerMiddleware) ServeHTTP(w http.ResponseWriter, r *http.Request) {
responseInfo, ok := r.Context().Value(helpers.ResponseInfoKey).(helpers.ResponseInfo)
if !ok {
lm.l.Errorf("Failed to read response info from context, got %v", r.Context().Value("response_info"))
responseInfo = defaultResponseInfo
}
method := r.Method
route := r.RequestURI
currentTime := time.Now().UTC()
httpVersion := r.Proto
clientIP, _, err := net.SplitHostPort(r.RemoteAddr)
if err != nil {
lm.l.Errorf("Failed to read remote IP: %s", err.Error())
clientIP = "unknown"
}
lm.l.Infof(`%s - [%s] "%s %s %s" %d %d`, clientIP, currentTime.Format(time.RFC3339), method, route, httpVersion, responseInfo.ReturnCode, responseInfo.ContentLength)
}