var ( // NoopTags is a trivial, minimum overhead implementation of Tags for which all operations are no-ops. NoopTags = &noopTags{} )
func CodeGenRequestFieldExtractor(fullMethod string, req interface{}) map[string]interface{}
CodeGenRequestFieldExtractor is a function that relies on code-generated functions that export log fields from requests. These are usually coming from a protoc-plugin that generates additional information based on custom field options.
func SetInContext(ctx context.Context, tags Tags) context.Context
func StreamServerInterceptor(opts ...Option) grpc.StreamServerInterceptor
StreamServerInterceptor returns a new streaming server interceptor that sets the values for request tags.
func UnaryServerInterceptor(opts ...Option) grpc.UnaryServerInterceptor
UnaryServerInterceptor returns a new unary server interceptors that sets the values for request tags.
type Option func(*options)
func WithFieldExtractor(f RequestFieldExtractorFunc) Option
WithFieldExtractor customizes the function for extracting log fields from protobuf messages, for unary and server-streamed methods only.
func WithFieldExtractorForInitialReq(f RequestFieldExtractorFunc) Option
WithFieldExtractorForInitialReq customizes the function for extracting log fields from protobuf messages, for all unary and streaming methods. For client-streams and bidirectional-streams, the tags will be extracted from the first message from the client.
RequestFieldExtractorFunc is a user-provided function that extracts field information from a gRPC request. It is called from tags middleware on arrival of unary request or a server-stream request. Keys and values will be added to the context tags of the request. If there are no fields, you should return a nil.
type RequestFieldExtractorFunc func(fullMethod string, req interface{}) map[string]interface{}
func TagBasedRequestFieldExtractor(tagName string) RequestFieldExtractorFunc
TagBasedRequestFieldExtractor is a function that relies on Go struct tags to export log fields from requests. These are usually coming from a protoc-plugin, such as Gogo protobuf.
message Metadata { repeated string tags = 1 [ (gogoproto.moretags) = "log_field:\"meta_tags\"" ]; }
The tagName is configurable using the tagName variable. Here it would be "log_field".
Tags is the interface used for storing request tags between Context calls. The default implementation is *not* thread safe, and should be handled only in the context of the request.
type Tags interface { // Set sets the given key in the metadata tags. Set(key string, value interface{}) Tags // Has checks if the given key exists. Has(key string) bool // Values returns a map of key to values. // Do not modify the underlying map, please use Set instead. Values() map[string]interface{} }
func Extract(ctx context.Context) Tags
Extracts returns a pre-existing Tags object in the Context. If the context wasn't set in a tag interceptor, a no-op Tag storage is returned that will *not* be propagated in context.
func NewTags() Tags