diff --git a/api/main.go b/api/main.go index a9fd19b..90a51ee 100644 --- a/api/main.go +++ b/api/main.go @@ -7,10 +7,12 @@ import ( "fmt" "net/http" "os" + "time" "github.com/joho/godotenv" "github.com/juju/ratelimit" "github.com/labstack/echo/v4" + "go.uber.org/zap" ) func main() { @@ -51,6 +53,43 @@ func main() { } }) + // Zap logger + // logger.Debug("debug log") + // logger.Info("info log") + // logger.Warn("warn log") + // logger.Error("error log") + logger, _ := zap.NewProduction() + defer logger.Sync() + e.Use(func(next echo.HandlerFunc) echo.HandlerFunc { + return func(c echo.Context) error { + req := c.Request() + res := c.Response() + start := time.Now() + if err := next(c); err != nil { + c.Error(err) + } + stop := time.Now() + latency := stop.Sub(start) + + fields := []zap.Field{ + zap.String("method", req.Method), + zap.String("uri", req.RequestURI), + zap.Int("status", res.Status), + zap.Duration("latency", latency), + zap.String("remote_ip", c.RealIP()), + zap.String("user_agent", req.UserAgent()), + } + + if res.Status >= http.StatusBadRequest { + logger.Warn("Request failed", fields...) + } else { + logger.Info("Request succeeded", fields...) + } + + return nil + } + }) + // Routes e.GET("/health", handlers.HealthGet) // Health Check e.POST("/register", handlers.RegisterPost) // Register a new user diff --git a/go.mod b/go.mod index 699f2bb..6508249 100644 --- a/go.mod +++ b/go.mod @@ -7,6 +7,7 @@ require ( github.com/juju/ratelimit v1.0.2 github.com/labstack/echo/v4 v4.10.0 go.mongodb.org/mongo-driver v1.11.1 + go.uber.org/zap v1.24.0 ) require ( @@ -23,6 +24,8 @@ require ( github.com/xdg-go/scram v1.1.1 // indirect github.com/xdg-go/stringprep v1.0.3 // indirect github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect + go.uber.org/atomic v1.10.0 // indirect + go.uber.org/multierr v1.9.0 // indirect golang.org/x/crypto v0.5.0 // indirect golang.org/x/net v0.5.0 // indirect golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect diff --git a/go.sum b/go.sum index cea3dac..d940a11 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,4 @@ +github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -54,6 +55,13 @@ github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d h1:splanxYIlg+5LfHAM github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= go.mongodb.org/mongo-driver v1.11.1 h1:QP0znIRTuL0jf1oBQoAoM0C6ZJfBK4kx0Uumtv1A7w8= go.mongodb.org/mongo-driver v1.11.1/go.mod h1:s7p5vEtfbeR1gYi6pnj3c3/urpbLv2T5Sfd6Rp2HBB8= +go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= +go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= +go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI= +go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= +go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= +go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= +go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.5.0 h1:U/0M97KRkSFvyD/3FSmdP5W5swImpNgle/EHFhOsQPE= golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU=