Commit e631dd1

mo khan <mo@mokhan.ca>
2022-05-15 21:21:17
feat: add logging middleware
1 parent 12129cb
pkg/web/default.go
@@ -1,6 +1,8 @@
 package web
 
-import "net/http"
+import (
+	"net/http"
+)
 
 func (h *HttpContext) Default(w http.ResponseWriter, r *http.Request) {
 	w.WriteHeader(http.StatusNotFound)
pkg/web/http_context.go
@@ -1,28 +1,31 @@
 package web
 
 import (
-	"log"
 	"net/http"
+	"time"
+
+	"github.com/sirupsen/logrus"
 )
 
 type HttpContext struct {
 	issuer  string
 	keyData []byte
-	log     *log.Logger
+	log     *logrus.Logger
 }
 
 func NewHttpContext(issuer string, keyData []byte) *HttpContext {
+	logger := logrus.New()
 	return &HttpContext{
 		issuer:  issuer,
 		keyData: keyData,
-		log:     log.Default(),
+		log:     logger,
 	}
 }
 
 func (h *HttpContext) Router() *http.ServeMux {
 	mux := http.NewServeMux()
 
-	mux.Handle("/", http.HandlerFunc(h.Default))
+	mux.Handle("/", h.withLogging(http.HandlerFunc(h.Default)))
 	mux.Handle("/.well-known/", h.wellKnownMux())
 	mux.Handle("/authorize", http.HandlerFunc(h.Authorize))
 	mux.Handle("/register", http.HandlerFunc(h.Register))
@@ -38,3 +41,21 @@ func (h *HttpContext) wellKnownMux() *http.ServeMux {
 	mux.Handle("/.well-known/openid-configuration", http.HandlerFunc(h.OpenIdConfiguration))
 	return mux
 }
+
+func (h *HttpContext) withLogging(next http.Handler) http.Handler {
+	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+		start := time.Now()
+		next.ServeHTTP(w, r)
+		end := time.Now()
+
+		h.log.WithFields(logrus.Fields{
+			"content_type": r.Header.Get("Content-Type"),
+			"finished_at":  end.Unix(),
+			"method":       r.Method,
+			"path":         r.URL.Path,
+			"remote_addr":  r.RemoteAddr,
+			"started_at":   start.Unix(),
+			"user_agent":   r.UserAgent,
+		}).Info("Done")
+	})
+}
go.mod
@@ -8,6 +8,7 @@ require (
 	github.com/hashicorp/uuid v0.0.0-20160311170451-ebb0a03e909c
 	github.com/lestrrat-go/jwx/v2 v2.0.0-beta1
 	github.com/mattn/go-sqlite3 v1.14.12
+	github.com/sirupsen/logrus v1.8.1
 	github.com/stretchr/testify v1.7.1
 )
 
@@ -25,5 +26,6 @@ require (
 	github.com/pmezard/go-difflib v1.0.0 // indirect
 	go.uber.org/atomic v1.7.0 // indirect
 	golang.org/x/crypto v0.0.0-20220214200702-86341886e292 // indirect
+	golang.org/x/sys v0.0.0-20220317061510-51cd9980dadf // indirect
 	gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect
 )
go.sum
@@ -986,6 +986,7 @@ github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMB
 github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
 github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
 github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
+github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE=
 github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
 github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
 github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
@@ -1416,6 +1417,7 @@ golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBc
 golang.org/x/sys v0.0.0-20211205182925-97ca703d548d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220111092808-5a964db01320/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220317061510-51cd9980dadf h1:Fm4IcnUL803i92qDlmB0obyHmosDrxZWxJL3gIeNqOw=
 golang.org/x/sys v0.0.0-20220317061510-51cd9980dadf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=