You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
continuous-integration/drone/push Build is passing
Details
|
2 months ago | |
---|---|---|
.drone.yml | 2 months ago | |
.gitignore | 2 years ago | |
LICENSE | 2 years ago | |
README.md | 2 months ago | |
config.go | 2 months ago | |
go.mod | 3 months ago | |
go.sum | 3 months ago | |
logger.go | 2 months ago | |
logger_test.go | 2 months ago | |
renovate.json | 6 months ago |
README.md
chizap 
A request logging middleware for go-chi using zap.
Getting started
Installation
go get gitea.dwysokinski.me/Kichiyaki/chizap
Usage
package main
import (
"log"
"net/http"
"strings"
"gitea.dwysokinski.me/Kichiyaki/chizap"
"github.com/go-chi/chi/v5"
"go.uber.org/zap"
)
func main() {
logger, err := zap.NewDevelopment()
if err != nil {
log.Fatalln("zap.NewDevelopment", err)
}
http.ListenAndServe(":8080", newRouter(logger))
}
func newRouter(logger *zap.Logger) *chi.Mux {
router := chi.NewRouter()
router.Route("/", func(r chi.Router) {
r.Use(chizap.Logger(
logger,
chizap.WithFilter(func(r *http.Request) bool {
return r.URL.Path != "/excluded"
}),
chizap.WithFilter(func(r *http.Request) bool {
return r.URL.Path != "/excluded2"
}),
chizap.WithAdditionalFieldExtractor(func(r *http.Request) []zap.Field {
if !strings.HasPrefix(r.URL.Path, "/delete") {
return nil
}
return []zap.Field{
zap.String("id", chi.URLParam(r, "id")),
}
}),
))
r.Get("/info", func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
})
r.Get("/warn", func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusBadRequest)
})
r.Get("/error", func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusInternalServerError)
})
r.Get("/excluded", func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
})
r.Delete("/delete/{id}", func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
})
})
return router
}
License
Distributed under the MIT License. See LICENSE
for more information.
Contact
Dawid Wysokiński - contact@dwysokinski.me