diff options
| author | mo khan <mo@mokhan.ca> | 2022-05-15 15:21:17 -0600 |
|---|---|---|
| committer | mo khan <mo@mokhan.ca> | 2022-05-15 15:21:17 -0600 |
| commit | e631dd1e6334d370f917e17c174b0c8d2d9f84e9 (patch) | |
| tree | 8c48ebf23e95e4b1ff3c3929f1938ed5b2b71cd7 | |
| parent | 12129cb4f0143c58a5d6c12ce905b950a0d996b5 (diff) | |
feat: add logging middleware
| -rw-r--r-- | go.mod | 2 | ||||
| -rw-r--r-- | go.sum | 2 | ||||
| -rw-r--r-- | pkg/web/default.go | 4 | ||||
| -rw-r--r-- | pkg/web/http_context.go | 29 |
4 files changed, 32 insertions, 5 deletions
@@ -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 ) @@ -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= diff --git a/pkg/web/default.go b/pkg/web/default.go index 9a4d89c..ac3ec8e 100644 --- a/pkg/web/default.go +++ b/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) diff --git a/pkg/web/http_context.go b/pkg/web/http_context.go index 16742c7..ceabc70 100644 --- a/pkg/web/http_context.go +++ b/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") + }) +} |
