Documentation ¶
Overview ¶
`ctxzap` is a ctxlogger that is backed by Zap
It accepts a user-configured `zap.Logger` that will be used for logging. The same `zap.Logger` will be populated into the `context.Context` passed into gRPC handler code.
You can use `ctxzap.Extract` to log into a request-scoped `zap.Logger` instance in your handler code.
As `ctxzap.Extract` will iterate all tags on from `grpc_ctxtags` it is therefore expensive so it is advised that you extract once at the start of the function from the context and reuse it for the remainder of the function (see examples).
Please see examples and tests for examples of use.
Index ¶
- func AddFields(ctx context.Context, fields ...zapcore.Field)
- func Debug(ctx context.Context, msg string, fields ...zap.Field)
- func Error(ctx context.Context, msg string, fields ...zap.Field)
- func Extract(ctx context.Context) *zap.Logger
- func Info(ctx context.Context, msg string, fields ...zap.Field)
- func TagsToFields(ctx context.Context) []zapcore.Field
- func ToContext(ctx context.Context, logger *zap.Logger) context.Context
- func Warn(ctx context.Context, msg string, fields ...zap.Field)
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func Debug ¶ added in v1.3.0
Debug is equivalent to calling Debug on the zap.Logger in the context. It is a no-op if the context does not contain a zap.Logger.
func Error ¶ added in v1.3.0
Error is equivalent to calling Error on the zap.Logger in the context. It is a no-op if the context does not contain a zap.Logger.
func Extract ¶
Extract takes the call-scoped Logger from grpc_zap middleware.
It always returns a Logger that has all the grpc_ctxtags updated.
Example (Unary) ¶
Simple unary handler that adds custom fields to the requests's context. These will be used for all log statements.
package main import ( "context" "github.com/grpc-ecosystem/go-grpc-middleware/logging/zap/ctxzap" "github.com/grpc-ecosystem/go-grpc-middleware/tags" pb_testproto "github.com/grpc-ecosystem/go-grpc-middleware/testing/testproto" "go.uber.org/zap" ) var zapLogger *zap.Logger // Simple unary handler that adds custom fields to the requests's context. These will be used for all log statements. func main() { _ = func(ctx context.Context, ping *pb_testproto.PingRequest) (*pb_testproto.PingResponse, error) { // Add fields the ctxtags of the request which will be added to all extracted loggers. grpc_ctxtags.Extract(ctx).Set("custom_tags.string", "something").Set("custom_tags.int", 1337) // Extract a single request-scoped zap.Logger and log messages. l := ctxzap.Extract(ctx) l.Info("some ping") l.Info("another ping") return &pb_testproto.PingResponse{Value: ping.Value}, nil } }
Output:
func Info ¶ added in v1.3.0
Info is equivalent to calling Info on the zap.Logger in the context. It is a no-op if the context does not contain a zap.Logger.
func TagsToFields ¶
TagsToFields transforms the Tags on the supplied context into zap fields.
Types ¶
This section is empty.