use zerolog logger for gin server
This commit is contained in:
parent
c6ac480ad7
commit
4e06072d96
3 changed files with 45 additions and 2 deletions
40
server/logger.go
Normal file
40
server/logger.go
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
package server
|
||||||
|
|
||||||
|
import (
|
||||||
|
"git.sr.ht/~cco/go-scopes/lib"
|
||||||
|
"git.sr.ht/~cco/go-scopes/logging"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"github.com/rs/zerolog"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Logger(ctx lib.Context) gin.HandlerFunc {
|
||||||
|
return func(c *gin.Context) {
|
||||||
|
// before request
|
||||||
|
// t := time.Now()
|
||||||
|
path := c.Request.URL.Path
|
||||||
|
raw := c.Request.URL.RawQuery
|
||||||
|
if raw != "" {
|
||||||
|
path = path + "?" + raw
|
||||||
|
}
|
||||||
|
c.Next()
|
||||||
|
// after request
|
||||||
|
msg := c.Errors.String()
|
||||||
|
if msg == "" {
|
||||||
|
msg = "request"
|
||||||
|
}
|
||||||
|
status := c.Writer.Status()
|
||||||
|
var evt *zerolog.Event
|
||||||
|
switch {
|
||||||
|
case status >= 500:
|
||||||
|
evt = logging.Error(ctx)
|
||||||
|
case status >= 400:
|
||||||
|
evt = logging.Warn(ctx)
|
||||||
|
default:
|
||||||
|
evt = logging.Info(ctx)
|
||||||
|
}
|
||||||
|
evt.Str("method", c.Request.Method).Str("path", path).
|
||||||
|
// Dur("resp_time", time.Since(t)).
|
||||||
|
Int("status", status).
|
||||||
|
Str("client_ip", c.ClientIP()).Msg(msg)
|
||||||
|
}
|
||||||
|
}
|
|
@ -19,6 +19,7 @@ type ServerState struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func Start(ctx lib.Context) {
|
func Start(ctx lib.Context) {
|
||||||
|
gin.SetMode(gin.ReleaseMode)
|
||||||
lib.GetCfg[*Cfg](ctx).BaseCfg.WithDoneHandler(HandleDone)
|
lib.GetCfg[*Cfg](ctx).BaseCfg.WithDoneHandler(HandleDone)
|
||||||
Serve(ctx)
|
Serve(ctx)
|
||||||
lib.RunCtx(ctx, core.Listen)
|
lib.RunCtx(ctx, core.Listen)
|
||||||
|
@ -30,7 +31,9 @@ func HandleDone(ctx lib.Context) bool {
|
||||||
}
|
}
|
||||||
|
|
||||||
func Serve(ctx lib.Context) {
|
func Serve(ctx lib.Context) {
|
||||||
r := gin.Default()
|
//r := gin.Default()
|
||||||
|
r := gin.New()
|
||||||
|
r.Use(Logger(ctx))
|
||||||
r.GET("/*action", func(c *gin.Context) {
|
r.GET("/*action", func(c *gin.Context) {
|
||||||
c.String(http.StatusOK, "Hello World")
|
c.String(http.StatusOK, "Hello World")
|
||||||
})
|
})
|
||||||
|
|
|
@ -19,7 +19,7 @@ func TestConfig(tb *tbase.T) {
|
||||||
t.Run("send", SendTest)
|
t.Run("send", SendTest)
|
||||||
t.Run("client", ClientTest)
|
t.Run("client", ClientTest)
|
||||||
t.TearDownApp()
|
t.TearDownApp()
|
||||||
t.AssertEqual(t.LogCount(true), 11)
|
t.AssertEqual(t.LogCount(true), 12)
|
||||||
}
|
}
|
||||||
|
|
||||||
func AppTest(t *testing.T) {
|
func AppTest(t *testing.T) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue