Module: GrpcInterceptors::Common::Logging
- Defined in:
- lib/grpc_interceptors/common/logging.rb
Class Method Summary collapse
- .build_payload(method, method_type, kind) ⇒ Object
-
.log(logger: nil, request: nil, method: nil, method_type: nil, kind: nil, extra_fields: {}) ⇒ Object
Log a gRPC interaction.
- .yield_and_log(logger: nil, request: nil, method: nil, method_type: nil, kind: nil) ⇒ Object
Class Method Details
.build_payload(method, method_type, kind) ⇒ Object
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/grpc_interceptors/common/logging.rb', line 60 def self.build_payload(method, method_type, kind) service = GrpcHelper.service_name(method) method = GrpcHelper.method_name(method) payload = { 'pid' => Process.pid, 'grpc.component' => kind, # the caller, server or client 'grpc.service' => service, 'grpc.method' => method, 'grpc.method_type' => method_type } if defined?(OpenTelemetry) && OpenTelemetry::Trace.current_span.recording? tracing_context = OpenTelemetry::Trace.current_span.context payload['span_id'] = tracing_context.hex_span_id payload['trace_id'] = tracing_context.hex_trace_id end payload end |
.log(logger: nil, request: nil, method: nil, method_type: nil, kind: nil, extra_fields: {}) ⇒ Object
Log a gRPC interaction.
If the current log level is INFO, then it logs out basic facts. If the current log level is DEBUG, then it additionally adds to the log request and response. If the server responds with error, then the error is added to the log.
45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/grpc_interceptors/common/logging.rb', line 45 def self.log( logger: nil, request: nil, method: nil, method_type: nil, kind: nil, extra_fields: {} ) payload = build_payload(method, method_type, kind) payload.merge!(extra_fields) if logger.level == ::Logger::Severity::INFO logger.info(payload) elsif logger.level == ::Logger::Severity::DEBUG payload['request'] = Common::GrpcHelper.proto_to_h(request) unless request.nil? logger.debug(payload) end end |
.yield_and_log(logger: nil, request: nil, method: nil, method_type: nil, kind: nil) ⇒ Object
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/grpc_interceptors/common/logging.rb', line 6 def self.yield_and_log( logger: nil, request: nil, method: nil, method_type: nil, kind: nil ) grpc_code = ::GRPC::Core::StatusCodes::OK response = yield rescue StandardError => e grpc_code = e.is_a?(::GRPC::BadStatus) ? e.code : ::GRPC::Core::StatusCodes::UNKNOWN extra_fields = { 'error' => e.class.to_s, 'error_message' => e., 'backtrace' => e.backtrace } raise ensure extra_fields ||= {} extra_fields['grpc.code'] = grpc_code if logger.level == ::Logger::Severity::DEBUG && !response.nil? && !response.is_a?(Enumerator) extra_fields['response'] = Common::GrpcHelper.proto_to_h(response) end log( logger: logger, request: request, method: method, method_type: method_type, kind: kind, extra_fields: extra_fields ) end |