/// <summary> /// 服务端处理 /// </summary> /// <typeparam name="TRequest">请求类型</typeparam> /// <typeparam name="TResponse">响应类型</typeparam> /// <param name="request">请求对象</param> /// <param name="context">服务回调上下文</param> /// <param name="continuation">服务方法</param> /// <returns>响应任务</returns> public override Task <TResponse> UnaryServerHandler <TRequest, TResponse>(TRequest request, ServerCallContext context, UnaryServerMethod <TRequest, TResponse> continuation) { var stop = new Stopwatch(); stop.Start(); var path = context.GetHttpContext().Request.Path.Value; var re = continuation(request, context); stop.Stop(); var msg = $"GRpc请求:{path} 耗时:{stop.ElapsedMilliseconds}ms"; string eventId = null; if (theOperation != null) { if (string.IsNullOrWhiteSpace(theOperation.EventId)) { theOperation.EventId = context.GetHttpContext().Request.GetEventId(); } eventId = theOperation.EventId; } switch (options.LogLevel) { case LogLevelEnum.TRACE: _ = log.TraceAsync(msg, null, "GRpcRequestLogInterceptor", eventId: eventId, path); break; case LogLevelEnum.DEBUG: _ = log.DebugAsync(msg, null, "GRpcRequestLogInterceptor", eventId: eventId, path); break; case LogLevelEnum.WRAN: _ = log.WranAsync(msg, null, "GRpcRequestLogInterceptor", eventId: eventId, path); break; case LogLevelEnum.INFO: _ = log.InfoAsync(msg, null, "GRpcRequestLogInterceptor", eventId: eventId, path); break; case LogLevelEnum.ERROR: _ = log.ErrorAsync(msg, null, "GRpcRequestLogInterceptor", eventId: eventId, path); break; case LogLevelEnum.FATAL: _ = log.FatalAsync(msg, null, "GRpcRequestLogInterceptor", eventId: eventId, path); break; } return(re); }
/// <summary> /// 执行 /// </summary> /// <param name="context">http上下文</param> /// <returns>任务</returns> public async Task InvokeAsync(HttpContext context) { var stop = new Stopwatch(); stop.Start(); var path = context.Request.Path.Value.ToLower(); await next(context); stop.Stop(); var msg = $"请求:{path},耗时:{stop.ElapsedMilliseconds}ms"; switch (options.LogLevel) { case LogLevelEnum.TRACE: _ = log.TraceAsync(msg, null, "RequestLogMiddleware", path); break; case LogLevelEnum.DEBUG: _ = log.DebugAsync(msg, null, "RequestLogMiddleware", path); break; case LogLevelEnum.WRAN: _ = log.WranAsync(msg, null, "RequestLogMiddleware", path); break; case LogLevelEnum.INFO: _ = log.InfoAsync(msg, null, "RequestLogMiddleware", path); break; case LogLevelEnum.ERROR: _ = log.ErrorAsync(msg, null, "RequestLogMiddleware", path); break; case LogLevelEnum.FATAL: _ = log.FatalAsync(msg, null, "RequestLogMiddleware", path); break; } }
/// <summary> /// 执行 /// </summary> /// <param name="context">http上下文</param> /// <returns>任务</returns> public async Task InvokeAsync(HttpContext context) { var routeValue = context.Request.RouteValues; var routes = routeValue.GetControllerAction(); // 过滤掉非控制器(排除掉GRpc) if (routes.IsNullOrLength0() && !GRpcChannelUtil.IsRequestGRpc(context.Request.ContentType)) { await next(context); return; } var stop = new Stopwatch(); stop.Start(); var path = context.Request.Path.Value.ToLower(); await next(context); stop.Stop(); var msg = new StringBuilder($"请求:{path} method:{context.Request.Method} "); string controller = null, action = null; if (routes != null && routes.Length == 2) { controller = routes[0]; action = routes[1]; msg.AppendFormat("controller:{0},action:{1}.", controller, action); } msg.Append($"耗时:{stop.ElapsedMilliseconds}ms"); var msgStr = msg.ToString(); string eventId = theOperation != null ? theOperation.EventId : null; switch (options.LogLevel) { case LogLevelEnum.TRACE: _ = log.TraceAsync(msgStr, null, "RequestLogMiddleware", eventId: eventId, path, controller, action); break; case LogLevelEnum.DEBUG: _ = log.DebugAsync(msgStr, null, "RequestLogMiddleware", eventId: eventId, path, controller, action); break; case LogLevelEnum.WRAN: _ = log.WranAsync(msgStr, null, "RequestLogMiddleware", eventId: eventId, path, controller, action); break; case LogLevelEnum.INFO: _ = log.InfoAsync(msgStr, null, "RequestLogMiddleware", eventId: eventId, path, controller, action); break; case LogLevelEnum.ERROR: _ = log.ErrorAsync(msgStr, null, "RequestLogMiddleware", eventId: eventId, path, controller, action); break; case LogLevelEnum.FATAL: _ = log.FatalAsync(msgStr, null, "RequestLogMiddleware", eventId: eventId, path, controller, action); break; } }