leosunmo / zapchi

go-chi/chi logger middleware for uber-go/zap

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

ZapChi go.dev reference

Logging middleware for Chi using the Zap logging library from Uber.

Can take either flat or sugared logger, named or unnamed.

The Zap log level used will depend on the status code returned by the response.

Installation

go get github.com/leosunmo/zapchi

Usage

package main

import (
	"net/http"

	"github.com/go-chi/chi/v5"
	"github.com/go-chi/chi/v5/middleware"
	"github.com/leosunmo/zapchi"
	"go.uber.org/zap"
)

func main() {
	// Logger with default production config
	logger, _ := zap.NewProduction()
	defer logger.Sync() // Flush buffer

	// Service
	r := chi.NewRouter()

	// Panic recovery should happen first
	r.Use(middleware.Recoverer)

	// Request ID should be before logger
	r.Use(middleware.RequestID)

	// Zap logger with logger name router
	r.Use(zapchi.Logger(logger, "router"))

	// Sugared logger with no logger name
	// r.Use(zapchi.Logger(logger.Sugar(),""))

	r.Get("/", func(w http.ResponseWriter, r *http.Request) {
		w.Write([]byte("hello world"))
	})

	r.Get("/panic", func(w http.ResponseWriter, r *http.Request) {
		panic("panicing!")
	})

	r.Get("/info", func(w http.ResponseWriter, r *http.Request) {
		w.Header().Add("Content-Type", "text/plain")
		w.Write([]byte("info level"))
	})

	r.Get("/warn", func(w http.ResponseWriter, r *http.Request) {
		w.WriteHeader(400)
		w.Write([]byte("warn level"))
	})

	r.Get("/err", func(w http.ResponseWriter, r *http.Request) {
		w.WriteHeader(500)
		w.Write([]byte("err level"))
	})

	http.ListenAndServe(":8000", r)
}

About

go-chi/chi logger middleware for uber-go/zap

License:MIT License


Languages

Language:Go 100.0%