38 lines
1.0 KiB
Go
38 lines
1.0 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/yuninks/loggerx"
|
|
"github.com/yuninks/loggerx/middleware"
|
|
)
|
|
|
|
// 运行: go run ./example/gin_server
|
|
// curl --location '127.0.0.1:8080/ping'
|
|
|
|
func main() {
|
|
ctx := context.Background()
|
|
log := loggerx.NewLogger(ctx,
|
|
loggerx.SetToConsole(),
|
|
loggerx.SetGinLog(true), // 把 gin 自身的 access log 也收进日志文件
|
|
)
|
|
// 进程退出前落盘并释放文件句柄
|
|
defer log.Close()
|
|
|
|
g := gin.New() // 用 gin.New 而不是 gin.Default,避免 access log 与中间件重复记录
|
|
g.Use(gin.Recovery())
|
|
|
|
// 生成/透传 trace id,并写回响应头 X-Trace-Id
|
|
g.Use(middleware.SetGinTraceId(log))
|
|
g.Use(middleware.SetGinParams(log))
|
|
|
|
g.GET("/ping", func(c *gin.Context) {
|
|
// trace id 通过 request context 传给日志,便于串起整条链路
|
|
log.Infof(c.Request.Context(), "GET /ping")
|
|
c.JSON(200, gin.H{"message": "pong", "trace_id": middleware.GetTraceId(c.Request.Context(), log.GetTraceField())})
|
|
})
|
|
|
|
_ = g.Run(":8080")
|
|
}
|