This commit is contained in:
parent
e75a4d4607
commit
4507728dae
32 changed files with 725 additions and 551 deletions
39
polyculeconnect/middlewares/logger.go
Normal file
39
polyculeconnect/middlewares/logger.go
Normal file
|
@ -0,0 +1,39 @@
|
|||
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)
|
||||
}
|
23
polyculeconnect/middlewares/middlewarechain.go
Normal file
23
polyculeconnect/middlewares/middlewarechain.go
Normal file
|
@ -0,0 +1,23 @@
|
|||
package middlewares
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
type MiddlewareChains struct {
|
||||
handlers []http.Handler
|
||||
}
|
||||
|
||||
func (mc *MiddlewareChains) ServeHTTP(rw http.ResponseWriter, r *http.Request) {
|
||||
for _, h := range mc.handlers {
|
||||
h.ServeHTTP(rw, r)
|
||||
}
|
||||
}
|
||||
|
||||
func WithLogger(handler http.Handler, l *logrus.Logger) *MiddlewareChains {
|
||||
return &MiddlewareChains{
|
||||
handlers: []http.Handler{handler, &LoggerMiddleware{l}},
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue