src/Middleware/Grpc/Interceptor/Interceptor.cs (57 lines of code) (raw):

using Grpc.Core; using Grpc.Core.Interceptors; using System; using System.IO; using System.Threading.Tasks; using System.Collections.Generic; using Serilog; using Serilog.Events; using Serilog.Context; using Serilog.Extensions.Logging; using System.Collections.Generic; using System.Diagnostics; using System.Threading.Tasks; namespace AKSMiddleware; public static class Constants { public const string ProtocolKey = "protocol"; public const string ProtocolValueGrpc = "grpc"; public const string ComponentFieldKey = "component"; public const string ComponentValueServer = "server"; public const string ComponentValueClient = "client"; public const string ServiceFieldKey = "service"; public const string MethodFieldKey = "method"; public const string MethodTypeFieldKey = "method_type"; public const string RequestIDMetadataKey = "x-request-id"; public const string RequestIDLogKey = "request-id"; public const string StartTimeKey = "start_time"; public const string TimeMsKey = "time_ms"; public const string StatusCodeKey = "code"; public const string PeerAddressKey = "peer_address"; } public class InterceptorFactory { public static Interceptor[] DefaultClientInterceptors(ILogger logger) { var clientLogger = logger.ForContext("source", "ApiRequestLog"); var interceptors = new Interceptor[] { new RetryInterceptor(), new ClientApiRequestLogger(clientLogger) }; return interceptors; } public static Interceptor[] DefaultServerInterceptors(ILogger logger) { // Use one enriched logger for API request logging and one for context logging var apiLogger = logger.ForContext("source", "ApiRequestLog"); var ctxLogger = logger.ForContext("source", "CtxLog"); var interceptors = new Interceptor[] { new ValidationInterceptor(apiLogger), new RequestIdInterceptor(), new CtxLoggerInterceptor(ctxLogger), new ServerApiRequestLogger(apiLogger) }; return interceptors; } }