public virtual void OnExecuted(object context) { MS.ServiceContext realContext = context as MS.ServiceContext; ResponseTime = DateTime.Now; //没有异常才处理Result,如果有异常Result会被异常代替 if (Exception == null) { //如果标记[LogIgnore],则不做日志记录 if (realContext.MethodInfo.GetCustomAttribute <LogIgnoreAttribute>() == null) { var respContent = realContext.GetRawResponse(); Result = respContent == null || respContent.Length == 0 ? new ResultMicServ <object>() : MessagePackSerializer.Deserialize <ResultMicServ <object> >(respContent.AsMemory()); //记录每次请求的往返内容 Logger.Info(new { Entrance, Action, Header, ReqParams, FuncParams, Result, RequestTime, ResponseTime, }.ToJson()); } } }
public virtual void OnExecuting(object context) { MS.ServiceContext realContext = context as MS.ServiceContext; RequestTime = DateTime.Now; var paramArray = realContext.RestoreParams(); Entrance = realContext.ServiceType.Name; Action = realContext.MethodInfo.Name; Header = realContext.CallContext.RequestHeaders.AsEnumerable().ToList().ToDictionary(k => k.Key, v => v.Value as object); ReqParams = paramArray; FuncParams = paramArray; #region 参数验证 //自定义的参数验证 FuncParams.Verify(); #endregion }
public virtual void OnException(object context, Exception exception) { MS.ServiceContext realContext = context as MS.ServiceContext; //获取最底层的错误 Exception = exception; while (Exception != null && Exception.InnerException != null) { Exception = Exception.InnerException; } Type resultBasicType = typeof(ResultBasic <>); Type resultMicServType = realContext.MethodInfo.ReturnParameter.ParameterType.GenericTypeArguments[0]; Type dataType = resultMicServType.GenericTypeArguments[0]; Type funcClassType = typeof(CusResultExtend); MethodInfo func_ResultBasic_Exception = funcClassType.GetMethod("ResultBasic_Exception").MakeGenericMethod(dataType); MethodInfo func_ToResultMicServ = funcClassType.GetMethod("ToResultMicServ").MakeGenericMethod(dataType); var resultBasic = func_ResultBasic_Exception.Invoke(null, new object[] { Exception, null }); Result = func_ToResultMicServ.Invoke(null, new object[] { resultBasic }); //是否标注了 志记录忽略 的标签,无标注 则需进行 日志记录 if (Exception.GetType().GetCustomAttribute <LogIgnoreAttribute>() == null) { //记录错误日志 Logger.Error(new { Entrance, Action, Header, ReqParams, FuncParams, Result, RequestTime, ResponseTime }, Exception); } }
public GRPCFilterRunner(MS.ServiceContext context, Func <MS.ServiceContext, ValueTask> next) { _context = context; _next = next; _filters = ServiceContext.ResolveByKeyed <IRequestFilterHandle>(Enum_FilterType.GRPC); }
public override async ValueTask Invoke(MS.ServiceContext context, Func <MS.ServiceContext, ValueTask> next) { await new GRPCFilterRunner(context, next).Run(); }
public virtual void OnExit(object context) { MS.ServiceContext realContext = context as MS.ServiceContext; realContext.SetRawResponse(MessagePackSerializer.Serialize(Result)); }