Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitaly.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/DOC.md')
-rw-r--r--vendor/github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/DOC.md257
1 files changed, 83 insertions, 174 deletions
diff --git a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/DOC.md b/vendor/github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/DOC.md
index 7a1bb9394..ba136f195 100644
--- a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/DOC.md
+++ b/vendor/github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/DOC.md
@@ -12,65 +12,35 @@
It accepts a user-configured `logrus.Entry` that will be used for logging completed gRPC calls. The same
`logrus.Entry` will be used for logging completed gRPC calls, and be populated into the `context.Context` passed into gRPC handler code.
-On calling `StreamServerInterceptor` or `UnaryServerInterceptor` this logging middleware will add gRPC call information
-to the ctx so that it will be present on subsequent use of the `ctxlogrus` logger.
+You can use `Extract` to log into a request-scoped `logrus.Entry` instance in your handler code. The fields set on the
+logger correspond to the grpc_ctxtags.Tags attached to the context.
This package also implements request and response *payload* logging, both for server-side and client-side. These will be
-logged as structured `jsonpb` fields for every message received/sent (both unary and streaming). For that please use
+logged as structured `jsonbp` fields for every message received/sent (both unary and streaming). For that please use
`Payload*Interceptor` functions for that. Please note that the user-provided function that determines whetether to log
the full request/response payload needs to be written with care, this can significantly slow down gRPC.
-If a deadline is present on the gRPC request the grpc.request.deadline tag is populated when the request begins. grpc.request.deadline
-is a string representing the time (RFC3339) when the current call will expire.
-
Logrus can also be made as a backend for gRPC library internals. For that use `ReplaceGrpcLogger`.
-*Server Interceptor*
-Below is a JSON formatted example of a log that would be logged by the server interceptor:
-
- {
- "level": "info", // string logrus log levels
- "msg": "finished unary call", // string log message
- "grpc.code": "OK", // string grpc status code
- "grpc.method": "Ping", // string method name
- "grpc.service": "mwitkow.testproto.TestService", // string full name of the called service
- "grpc.start_time": "2006-01-02T15:04:05Z07:00", // string RFC3339 representation of the start time
- "grpc.request.deadline": "2006-01-02T15:04:05Z07:00", // string RFC3339 deadline of the current request if supplied
- "grpc.request.value": "something", // string value on the request
- "grpc.time_ms": 1.234, // float32 run time of the call in ms
- "peer.address": {
- "IP": "127.0.0.1", // string IP address of calling party
- "Port": 60216, // int port call is coming in on
- "Zone": "" // string peer zone for caller
- },
- "span.kind": "server", // string client | server
- "system": "grpc" // string
-
- "custom_field": "custom_value", // string user defined field
- "custom_tags.int": 1337, // int user defined tag on the ctx
- "custom_tags.string": "something", // string user defined tag on the ctx
- }
+Please see examples and tests for examples of use.
-*Payload Interceptor*
-Below is a JSON formatted example of a log that would be logged by the payload interceptor:
-
- {
- "level": "info", // string logrus log levels
- "msg": "client request payload logged as grpc.request.content", // string log message
-
- "grpc.request.content": { // object content of RPC request
- "value": "something", // string defined by caller
- "sleepTimeMs": 9999 // int defined by caller
- },
- "grpc.method": "Ping", // string method being called
- "grpc.service": "mwitkow.testproto.TestService", // string service being called
- "span.kind": "client", // string client | server
- "system": "grpc" // string
- }
+#### Example:
-Note - due to implementation ZAP differs from Logrus in the "grpc.request.content" object by having an inner "msg" object.
+<details>
+<summary>Click to expand code.</summary>
-Please see examples and tests for examples of use.
+```go
+x := 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 request-scoped zap.Logger and log a message.
+ grpc_logrus.Extract(ctx).Info("some ping")
+ return &pb_testproto.PingResponse{Value: ping.Value}, nil
+ }
+ return x
+```
+
+</details>
#### Example:
@@ -79,24 +49,25 @@ Please see examples and tests for examples of use.
```go
// Logrus entry is used, allowing pre-definition of certain fields by the user.
-logrusEntry := logrus.NewEntry(logrusLogger)
-// Shared options for the logger, with a custom gRPC code to log level function.
-opts := []grpc_logrus.Option{
- grpc_logrus.WithLevels(customFunc),
-}
-// Make sure that log statements internal to gRPC library are logged using the logrus Logger as well.
-grpc_logrus.ReplaceGrpcLogger(logrusEntry)
-// Create a server, make sure we put the grpc_ctxtags context before everything else.
-_ = grpc.NewServer(
- grpc_middleware.WithUnaryServerChain(
- grpc_ctxtags.UnaryServerInterceptor(grpc_ctxtags.WithFieldExtractor(grpc_ctxtags.CodeGenRequestFieldExtractor)),
- grpc_logrus.UnaryServerInterceptor(logrusEntry, opts...),
- ),
- grpc_middleware.WithStreamServerChain(
- grpc_ctxtags.StreamServerInterceptor(grpc_ctxtags.WithFieldExtractor(grpc_ctxtags.CodeGenRequestFieldExtractor)),
- grpc_logrus.StreamServerInterceptor(logrusEntry, opts...),
- ),
-)
+ logrusEntry := logrus.NewEntry(logrusLogger)
+ // Shared options for the logger, with a custom gRPC code to log level function.
+ opts := []grpc_logrus.Option{
+ grpc_logrus.WithLevels(customFunc),
+ }
+ // Make sure that log statements internal to gRPC library are logged using the zapLogger as well.
+ grpc_logrus.ReplaceGrpcLogger(logrusEntry)
+ // Create a server, make sure we put the grpc_ctxtags context before everything else.
+ server := grpc.NewServer(
+ grpc_middleware.WithUnaryServerChain(
+ grpc_ctxtags.UnaryServerInterceptor(grpc_ctxtags.WithFieldExtractor(grpc_ctxtags.CodeGenRequestFieldExtractor)),
+ grpc_logrus.UnaryServerInterceptor(logrusEntry, opts...),
+ ),
+ grpc_middleware.WithStreamServerChain(
+ grpc_ctxtags.StreamServerInterceptor(grpc_ctxtags.WithFieldExtractor(grpc_ctxtags.CodeGenRequestFieldExtractor)),
+ grpc_logrus.StreamServerInterceptor(logrusEntry, opts...),
+ ),
+ )
+ return server
```
</details>
@@ -108,36 +79,36 @@ _ = grpc.NewServer(
```go
// Logrus entry is used, allowing pre-definition of certain fields by the user.
-logrusEntry := logrus.NewEntry(logrusLogger)
-// Shared options for the logger, with a custom duration to log field function.
-opts := []grpc_logrus.Option{
- grpc_logrus.WithDurationField(func(duration time.Duration) (key string, value interface{}) {
- return "grpc.time_ns", duration.Nanoseconds()
- }),
-}
-_ = grpc.NewServer(
- grpc_middleware.WithUnaryServerChain(
- grpc_ctxtags.UnaryServerInterceptor(),
- grpc_logrus.UnaryServerInterceptor(logrusEntry, opts...),
- ),
- grpc_middleware.WithStreamServerChain(
- grpc_ctxtags.StreamServerInterceptor(),
- grpc_logrus.StreamServerInterceptor(logrusEntry, opts...),
- ),
-)
+ logrusEntry := logrus.NewEntry(logrusLogger)
+ // Shared options for the logger, with a custom duration to log field function.
+ opts := []grpc_logrus.Option{
+ grpc_logrus.WithDurationField(func(duration time.Duration) (key string, value interface{}) {
+ return "grpc.time_ns", duration.Nanoseconds()
+ }),
+ }
+ server := grpc.NewServer(
+ grpc_middleware.WithUnaryServerChain(
+ grpc_ctxtags.UnaryServerInterceptor(),
+ grpc_logrus.UnaryServerInterceptor(logrusEntry, opts...),
+ ),
+ grpc_middleware.WithStreamServerChain(
+ grpc_ctxtags.StreamServerInterceptor(),
+ grpc_logrus.StreamServerInterceptor(logrusEntry, opts...),
+ ),
+ )
+ return server
```
</details>
## <a name="pkg-imports">Imported Packages</a>
+- github.com/sirupsen/logrus
- [github.com/golang/protobuf/jsonpb](https://godoc.org/github.com/golang/protobuf/jsonpb)
- [github.com/golang/protobuf/proto](https://godoc.org/github.com/golang/protobuf/proto)
- [github.com/grpc-ecosystem/go-grpc-middleware](./../..)
- [github.com/grpc-ecosystem/go-grpc-middleware/logging](./..)
-- [github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus](./ctxlogrus)
-- [github.com/grpc-ecosystem/go-grpc-middleware/tags/logrus](./../../tags/logrus)
-- [github.com/sirupsen/logrus](https://godoc.org/github.com/sirupsen/logrus)
+- [github.com/grpc-ecosystem/go-grpc-middleware/tags](./../../tags)
- [golang.org/x/net/context](https://godoc.org/golang.org/x/net/context)
- [google.golang.org/grpc](https://godoc.org/google.golang.org/grpc)
- [google.golang.org/grpc/codes](https://godoc.org/google.golang.org/grpc/codes)
@@ -145,7 +116,6 @@ _ = grpc.NewServer(
## <a name="pkg-index">Index</a>
* [Variables](#pkg-variables)
-* [func AddFields(ctx context.Context, fields logrus.Fields)](#AddFields)
* [func DefaultClientCodeToLevel(code codes.Code) logrus.Level](#DefaultClientCodeToLevel)
* [func DefaultCodeToLevel(code codes.Code) logrus.Level](#DefaultCodeToLevel)
* [func DurationToDurationField(duration time.Duration) (key string, value interface{})](#DurationToDurationField)
@@ -164,18 +134,16 @@ _ = grpc.NewServer(
* [type DurationToField](#DurationToField)
* [type Option](#Option)
* [func WithCodes(f grpc\_logging.ErrorToCode) Option](#WithCodes)
- * [func WithDecider(f grpc\_logging.Decider) Option](#WithDecider)
* [func WithDurationField(f DurationToField) Option](#WithDurationField)
* [func WithLevels(f CodeToLevel) Option](#WithLevels)
#### <a name="pkg-examples">Examples</a>
-* [Extract (Unary)](#example_Extract_unary)
-* [WithDecider](#example_WithDecider)
+* [Package (HandlerUsageUnaryPing)](#example__handlerUsageUnaryPing)
* [Package (Initialization)](#example__initialization)
* [Package (InitializationWithDurationFieldOverride)](#example__initializationWithDurationFieldOverride)
#### <a name="pkg-files">Package files</a>
-[client_interceptors.go](./client_interceptors.go) [context.go](./context.go) [doc.go](./doc.go) [grpclogger.go](./grpclogger.go) [options.go](./options.go) [payload_interceptors.go](./payload_interceptors.go) [server_interceptors.go](./server_interceptors.go)
+[client_interceptors.go](./client_interceptors.go) [context.go](./context.go) [doc.go](./doc.go) [grpclogger.go](./grpclogger.go) [noop.go](./noop.go) [options.go](./options.go) [payload_interceptors.go](./payload_interceptors.go) [server_interceptors.go](./server_interceptors.go)
## <a name="pkg-variables">Variables</a>
``` go
@@ -194,90 +162,66 @@ DefaultDurationToField is the default implementation of converting request durat
``` go
var (
- // JsonPbMarshaller is the marshaller used for serializing protobuf messages.
+ // JsonPBMarshaller is the marshaller used for serializing protobuf messages.
JsonPbMarshaller = &jsonpb.Marshaler{}
)
```
-## <a name="AddFields">func</a> [AddFields](./context.go#L11)
-``` go
-func AddFields(ctx context.Context, fields logrus.Fields)
-```
-AddFields adds logrus fields to the logger.
-Deprecated: should use the ctxlogrus.Extract instead
-
-## <a name="DefaultClientCodeToLevel">func</a> [DefaultClientCodeToLevel](./options.go#L129)
+## <a name="DefaultClientCodeToLevel">func</a> [DefaultClientCodeToLevel](./options.go#L120)
``` go
func DefaultClientCodeToLevel(code codes.Code) logrus.Level
```
DefaultClientCodeToLevel is the default implementation of gRPC return codes to log levels for client side.
-## <a name="DefaultCodeToLevel">func</a> [DefaultCodeToLevel](./options.go#L87)
+## <a name="DefaultCodeToLevel">func</a> [DefaultCodeToLevel](./options.go#L78)
``` go
func DefaultCodeToLevel(code codes.Code) logrus.Level
```
DefaultCodeToLevel is the default implementation of gRPC return codes to log levels for server side.
-## <a name="DurationToDurationField">func</a> [DurationToDurationField](./options.go#L179)
+## <a name="DurationToDurationField">func</a> [DurationToDurationField](./options.go#L170)
``` go
func DurationToDurationField(duration time.Duration) (key string, value interface{})
```
DurationToDurationField uses the duration value to log the request duration.
-## <a name="DurationToTimeMillisField">func</a> [DurationToTimeMillisField](./options.go#L174)
+## <a name="DurationToTimeMillisField">func</a> [DurationToTimeMillisField](./options.go#L165)
``` go
func DurationToTimeMillisField(duration time.Duration) (key string, value interface{})
```
DurationToTimeMillisField converts the duration to milliseconds and uses the key `grpc.time_ms`.
-## <a name="Extract">func</a> [Extract](./context.go#L17)
+## <a name="Extract">func</a> [Extract](./context.go#L22)
``` go
func Extract(ctx context.Context) *logrus.Entry
```
Extract takes the call-scoped logrus.Entry from grpc_logrus middleware.
-Deprecated: should use the ctxlogrus.Extract instead
-#### Example:
+If the grpc_logrus middleware wasn't used, a no-op `logrus.Entry` is returned. This makes it safe to
+use regardless.
-<details>
-<summary>Click to expand code.</summary>
-
-```go
-_ = 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 logrus.Logger and log messages.
- l := ctx_logrus.Extract(ctx)
- l.Info("some ping")
- l.Info("another ping")
- return &pb_testproto.PingResponse{Value: ping.Value}, nil
-}
-```
-
-</details>
-
-## <a name="PayloadStreamClientInterceptor">func</a> [PayloadStreamClientInterceptor](./payload_interceptors.go#L74)
+## <a name="PayloadStreamClientInterceptor">func</a> [PayloadStreamClientInterceptor](./payload_interceptors.go#L77)
``` go
func PayloadStreamClientInterceptor(entry *logrus.Entry, decider grpc_logging.ClientPayloadLoggingDecider) grpc.StreamClientInterceptor
```
-PayloadStreamClientInterceptor returns a new streaming client interceptor that logs the paylods of requests and responses.
+PayloadStreamServerInterceptor returns a new streaming client interceptor that logs the paylods of requests and responses.
-## <a name="PayloadStreamServerInterceptor">func</a> [PayloadStreamServerInterceptor](./payload_interceptors.go#L45)
+## <a name="PayloadStreamServerInterceptor">func</a> [PayloadStreamServerInterceptor](./payload_interceptors.go#L48)
``` go
func PayloadStreamServerInterceptor(entry *logrus.Entry, decider grpc_logging.ServerPayloadLoggingDecider) grpc.StreamServerInterceptor
```
-PayloadStreamServerInterceptor returns a new server server interceptors that logs the payloads of requests.
+PayloadUnaryServerInterceptor returns a new server server interceptors that logs the payloads of requests.
This *only* works when placed *after* the `grpc_logrus.StreamServerInterceptor`. However, the logging can be done to a
separate instance of the logger.
-## <a name="PayloadUnaryClientInterceptor">func</a> [PayloadUnaryClientInterceptor](./payload_interceptors.go#L58)
+## <a name="PayloadUnaryClientInterceptor">func</a> [PayloadUnaryClientInterceptor](./payload_interceptors.go#L61)
``` go
func PayloadUnaryClientInterceptor(entry *logrus.Entry, decider grpc_logging.ClientPayloadLoggingDecider) grpc.UnaryClientInterceptor
```
PayloadUnaryClientInterceptor returns a new unary client interceptor that logs the paylods of requests and responses.
-## <a name="PayloadUnaryServerInterceptor">func</a> [PayloadUnaryServerInterceptor](./payload_interceptors.go#L25)
+## <a name="PayloadUnaryServerInterceptor">func</a> [PayloadUnaryServerInterceptor](./payload_interceptors.go#L28)
``` go
func PayloadUnaryServerInterceptor(entry *logrus.Entry, decider grpc_logging.ServerPayloadLoggingDecider) grpc.UnaryServerInterceptor
```
@@ -299,7 +243,7 @@ func StreamClientInterceptor(entry *logrus.Entry, opts ...Option) grpc.StreamCli
```
StreamServerInterceptor returns a new streaming client interceptor that optionally logs the execution of external gRPC calls.
-## <a name="StreamServerInterceptor">func</a> [StreamServerInterceptor](./server_interceptors.go#L58)
+## <a name="StreamServerInterceptor">func</a> [StreamServerInterceptor](./server_interceptors.go#L50)
``` go
func StreamServerInterceptor(entry *logrus.Entry, opts ...Option) grpc.StreamServerInterceptor
```
@@ -311,77 +255,42 @@ func UnaryClientInterceptor(entry *logrus.Entry, opts ...Option) grpc.UnaryClien
```
UnaryClientInterceptor returns a new unary client interceptor that optionally logs the execution of external gRPC calls.
-## <a name="UnaryServerInterceptor">func</a> [UnaryServerInterceptor](./server_interceptors.go#L26)
+## <a name="UnaryServerInterceptor">func</a> [UnaryServerInterceptor](./server_interceptors.go#L25)
``` go
func UnaryServerInterceptor(entry *logrus.Entry, opts ...Option) grpc.UnaryServerInterceptor
```
-UnaryServerInterceptor returns a new unary server interceptors that adds logrus.Entry to the context.
+PayloadUnaryServerInterceptor returns a new unary server interceptors that adds logrus.Entry to the context.
-## <a name="CodeToLevel">type</a> [CodeToLevel](./options.go#L53)
+## <a name="CodeToLevel">type</a> [CodeToLevel](./options.go#L51)
``` go
type CodeToLevel func(code codes.Code) logrus.Level
```
CodeToLevel function defines the mapping between gRPC return codes and interceptor log level.
-## <a name="DurationToField">type</a> [DurationToField](./options.go#L56)
+## <a name="DurationToField">type</a> [DurationToField](./options.go#L54)
``` go
type DurationToField func(duration time.Duration) (key string, value interface{})
```
DurationToField function defines how to produce duration fields for logging
-## <a name="Option">type</a> [Option](./options.go#L50)
+## <a name="Option">type</a> [Option](./options.go#L48)
``` go
type Option func(*options)
```
-### <a name="WithCodes">func</a> [WithCodes](./options.go#L73)
+### <a name="WithCodes">func</a> [WithCodes](./options.go#L64)
``` go
func WithCodes(f grpc_logging.ErrorToCode) Option
```
WithCodes customizes the function for mapping errors to error codes.
-### <a name="WithDecider">func</a> [WithDecider](./options.go#L59)
-``` go
-func WithDecider(f grpc_logging.Decider) Option
-```
-WithDecider customizes the function for deciding if the gRPC interceptor logs should log.
-
-#### Example:
-
-<details>
-<summary>Click to expand code.</summary>
-
-```go
-opts := []grpc_logrus.Option{
- grpc_logrus.WithDecider(func(methodFullName string, err error) bool {
- // will not log gRPC calls if it was a call to healthcheck and no error was raised
- if err == nil && methodFullName == "blah.foo.healthcheck" {
- return false
- }
-
- // by default you will log all calls
- return true
- }),
-}
-
-_ = []grpc.ServerOption{
- grpc_middleware.WithStreamServerChain(
- grpc_ctxtags.StreamServerInterceptor(),
- grpc_logrus.StreamServerInterceptor(logrus.NewEntry(logrus.New()), opts...)),
- grpc_middleware.WithUnaryServerChain(
- grpc_ctxtags.UnaryServerInterceptor(),
- grpc_logrus.UnaryServerInterceptor(logrus.NewEntry(logrus.New()), opts...)),
-}
-```
-
-</details>
-### <a name="WithDurationField">func</a> [WithDurationField](./options.go#L80)
+### <a name="WithDurationField">func</a> [WithDurationField](./options.go#L71)
``` go
func WithDurationField(f DurationToField) Option
```
WithDurationField customizes the function for mapping request durations to log fields.
-### <a name="WithLevels">func</a> [WithLevels](./options.go#L66)
+### <a name="WithLevels">func</a> [WithLevels](./options.go#L57)
``` go
func WithLevels(f CodeToLevel) Option
```