diff --git a/README.md b/README.md index 51913b8..7709f32 100644 --- a/README.md +++ b/README.md @@ -83,45 +83,9 @@ r.Use(GinzapWithConfig(utcLogger, &Config{ })) ``` -## Log TraceID - -If you want to log [Open Telemetry](https://opentelemetry.io/) TraceID, use `GinzapWithConfig`. - -```go -import "go.opentelemetry.io/contrib/instrumentation/github.com/gin-gonic/gin/otelgin" - -r.Use(otelgin.Middleware("demo")) // middleware to extract trace from http request - -r.Use(ginzap.GinzapWithConfig(logger, &ginzap.Config{ - TimeFormat: time.RFC3339, - UTC: true, - TraceID: true, -})) -``` - -This will add the `traceId` field to log: - -```json -{ - "level": "info", - "ts": 1658442963.805288, - "caller": "ginzap/zap.go:82", - "msg": "/test", - "status": 200, - "method": "GET", - "path": "/test", - "query": "", - "ip": "127.0.0.1", - "user-agent": "curl/7.29.0", - "latency": 0.002036414, - "time": "2022-07-21T22:36:03Z", - "traceID": "285f31ec1dba4b79034c4415ad18e4ed" -} -``` - ## Custom Zap fields -example for custom log request body and response request ID +example for custom log request body, response request ID or log [Open Telemetry](https://opentelemetry.io/) TraceID. ```go func main() { @@ -132,7 +96,8 @@ func main() { r.Use(ginzap.GinzapWithConfig(logger, &ginzap.Config{ UTC: true, TimeFormat: time.RFC3339, - Context: ginzap.Fn(func(c *gin.Context) (fields []zapcore.Field) { + Context: ginzap.Fn(func(c *gin.Context) []zapcore.Field { + fields := []zapcore.Field{} // log response ID if requestID := c.Writer.Header().Get("X-Request-Id"); requestID != "" { fields = append(fields, zap.String("request-id", requestID)) @@ -146,7 +111,10 @@ func main() { c.Request.Body = io.NopCloser(&buf) fields = append(fields, zap.String("body", string(body))) - return + // support opentelemetry trace ID + fields = append(fields, zap.String("traceID", trace.SpanFromContext(c.Request.Context()).SpanContext().TraceID().String())) + + return fields }), })) diff --git a/_example/example02/main.go b/_example/example02/main.go index ceda28e..4a40aa3 100644 --- a/_example/example02/main.go +++ b/_example/example02/main.go @@ -8,6 +8,7 @@ import ( ginzap "github.com/gin-contrib/zap" "github.com/gin-gonic/gin" + "go.opentelemetry.io/otel/trace" "go.uber.org/zap" "go.uber.org/zap/zapcore" ) @@ -20,7 +21,8 @@ func main() { r.Use(ginzap.GinzapWithConfig(logger, &ginzap.Config{ UTC: true, TimeFormat: time.RFC3339, - Context: ginzap.Fn(func(c *gin.Context) (fields []zapcore.Field) { + Context: ginzap.Fn(func(c *gin.Context) []zapcore.Field { + fields := []zapcore.Field{} // log response ID if requestID := c.Writer.Header().Get("X-Request-Id"); requestID != "" { fields = append(fields, zap.String("request-id", requestID)) @@ -34,7 +36,10 @@ func main() { c.Request.Body = io.NopCloser(&buf) fields = append(fields, zap.String("body", string(body))) - return + // support opentelemetry trace ID + fields = append(fields, zap.String("traceID", trace.SpanFromContext(c.Request.Context()).SpanContext().TraceID().String())) + + return fields }), })) diff --git a/go.mod b/go.mod index 836bd7c..8960c2b 100644 --- a/go.mod +++ b/go.mod @@ -4,6 +4,5 @@ go 1.16 require ( github.com/gin-gonic/gin v1.8.1 - go.opentelemetry.io/otel/trace v1.10.0 go.uber.org/zap v1.23.0 ) diff --git a/go.sum b/go.sum index dee43fb..35d550d 100644 --- a/go.sum +++ b/go.sum @@ -8,9 +8,6 @@ github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8= github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk= -github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU= @@ -22,9 +19,8 @@ github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXS github.com/goccy/go-json v0.9.7 h1:IcB+Aqpx/iMHu5Yooh7jEzJk1JZ7Pjtmys2ukPr7EeM= github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= -github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= @@ -67,10 +63,6 @@ github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6 github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0= github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -go.opentelemetry.io/otel v1.10.0 h1:Y7DTJMR6zs1xkS/upamJYk0SxxN4C9AqRd77jmZnyY4= -go.opentelemetry.io/otel v1.10.0/go.mod h1:NbvWjCthWHKBEUMpf0/v8ZRZlni86PpGFEMA9pnQSnQ= -go.opentelemetry.io/otel/trace v1.10.0 h1:npQMbR8o7mum8uF95yFbOEJffhs1sbCOfDh8zAJiH5E= -go.opentelemetry.io/otel/trace v1.10.0/go.mod h1:Sij3YYczqAdz+EhmGhE6TpTxUO5/F/AzrK+kxfGqySM= go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI= @@ -114,6 +106,7 @@ golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= diff --git a/zap.go b/zap.go index bfaf75f..37dea94 100644 --- a/zap.go +++ b/zap.go @@ -12,7 +12,6 @@ import ( "time" "github.com/gin-gonic/gin" - "go.opentelemetry.io/otel/trace" "go.uber.org/zap" "go.uber.org/zap/zapcore" ) @@ -24,7 +23,6 @@ type Config struct { TimeFormat string UTC bool SkipPaths []string - TraceID bool // optionally log Open Telemetry TraceID Context Fn } @@ -73,9 +71,6 @@ func GinzapWithConfig(logger *zap.Logger, conf *Config) gin.HandlerFunc { if conf.TimeFormat != "" { fields = append(fields, zap.String("time", end.Format(conf.TimeFormat))) } - if conf.TraceID { - fields = append(fields, zap.String("traceID", trace.SpanFromContext(c.Request.Context()).SpanContext().TraceID().String())) - } if conf.Context != nil { fields = append(fields, conf.Context(c)...)