github.com/hxx258456/ccgo@v0.0.5-0.20230213014102-48b35f46f66f/go-grpc-middleware/logging/zap/doc.go (about)

     1  /*
     2  `grpc_zap` is a gRPC logging middleware backed by ZAP loggers
     3  
     4  It accepts a user-configured `zap.Logger` that will be used for logging completed gRPC calls. The same `zap.Logger` will
     5  be used for logging completed gRPC calls, and be populated into the `context.Context` passed into gRPC handler code.
     6  
     7  On calling `StreamServerInterceptor` or `UnaryServerInterceptor` this logging middleware will add gRPC call information
     8  to the ctx so that it will be present on subsequent use of the `ctx_zap` logger.
     9  
    10  If a deadline is present on the gRPC request the grpc.request.deadline tag is populated when the request begins. grpc.request.deadline
    11  is a string representing the time (RFC3339) when the current call will expire.
    12  
    13  This package also implements request and response *payload* logging, both for server-side and client-side. These will be
    14  logged as structured `jsonpb` fields for every message received/sent (both unary and streaming). For that please use
    15  `Payload*Interceptor` functions for that. Please note that the user-provided function that determines whetether to log
    16  the full request/response payload needs to be written with care, this can significantly slow down gRPC.
    17  
    18  ZAP can also be made as a backend for gRPC library internals. For that use `ReplaceGrpcLogger`.
    19  
    20  
    21  *Server Interceptor*
    22  Below is a JSON formatted example of a log that would be logged by the server interceptor:
    23  
    24  	{
    25  	  "level": "info",									// string  zap log levels
    26  	  "msg": "finished unary call",						// string  log message
    27  
    28  	  "grpc.code": "OK",								// string  grpc status code
    29  	  "grpc.method": "Ping",							// string  method name
    30  	  "grpc.service": "mwitkow.testproto.TestService",  // string  full name of the called service
    31  	  "grpc.start_time": "2006-01-02T15:04:05Z07:00",   // string  RFC3339 representation of the start time
    32  	  "grpc.request.deadline": "2006-01-02T15:04:05Z07:00",   // string  RFC3339 deadline of the current request if supplied
    33  	  "grpc.request.value": "something",				// string  value on the request
    34  	  "grpc.time_ms": 1.345,							// float32 run time of the call in ms
    35  
    36  	  "peer.address": {
    37  	    "IP": "127.0.0.1",								// string  IP address of calling party
    38  	    "Port": 60216,									// int     port call is coming in on
    39  	    "Zone": ""										// string  peer zone for caller
    40  	  },
    41  	  "span.kind": "server",							// string  client | server
    42  	  "system": "grpc"									// string
    43  
    44  	  "custom_field": "custom_value",					// string  user defined field
    45  	  "custom_tags.int": 1337,							// int     user defined tag on the ctx
    46  	  "custom_tags.string": "something",				// string  user defined tag on the ctx
    47  	}
    48  
    49  *Payload Interceptor*
    50  Below is a JSON formatted example of a log that would be logged by the payload interceptor:
    51  
    52  	{
    53  	  "level": "info",													// string zap log levels
    54  	  "msg": "client request payload logged as grpc.request.content",   // string log message
    55  
    56  	  "grpc.request.content": {											// object content of RPC request
    57  	    "msg" : {														// object ZAP specific inner object
    58  		  "value": "something",											// string defined by caller
    59  	      "sleepTimeMs": 9999											// int    defined by caller
    60  	    }
    61  	  },
    62  	  "grpc.method": "Ping",											// string method being called
    63  	  "grpc.service": "mwitkow.testproto.TestService",					// string service being called
    64  
    65  	  "span.kind": "client",											// string client | server
    66  	  "system": "grpc"													// string
    67  	}
    68  
    69  Note - due to implementation ZAP differs from Logrus in the "grpc.request.content" object by having an inner "msg" object.
    70  
    71  
    72  Please see examples and tests for examples of use.
    73  */
    74  package grpc_zap