/// <summary> /// Registers the exception. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="errCode">Error Code.</param> /// <param name="errMsg">Error Message.</param> /// <param name="httpStatus">Http Status Code.</param> /// <param name="logType">LogType.</param> public void RegisterException <T>(int errCode, string errMsg = null, int httpStatus = 0, LogType logType = LogType.LogMessage) where T : Exception { ExceptionModel func(T ex) { var result = new ExceptionModel { Code = errCode, Message = errMsg ?? ex.Message, LogType = logType, HttpStatus = httpStatus }; if (ex is IMultiError multi) { result.Errors = multi.Errors; } return(result); } RegisterException((Func <T, ExceptionModel>)func); }
public BasicExceptionProcessModule(ExceptionOptions options) { defaultHttpStatus = options.UseOkStatus ? 200 : 400; useOkStatus = options.UseOkStatus; var baselist = new List <ExceptonTypeModel> { new ExceptonTypeModel(typeof(AuthorizeException), (exception) => { var typeEx = (AuthorizeException)exception; var model = new ExceptionModel() { Code = 40100, Message = typeEx.Message, LogType = LogType.LogMessage }; if (!useOkStatus) { model.HttpStatus = 401; } return(model); }), new ExceptonTypeModel(typeof(PermissionException), (exception) => { var typeEx = (PermissionException)exception; var model = new ExceptionModel() { Code = 40300, Message = typeEx.Message, LogType = LogType.LogMessage }; if (!useOkStatus) { model.HttpStatus = 403; } return(model); }), new ExceptonTypeModel(typeof(ParameterException), (exception) => { var typeEx = (ParameterException)exception; var model = new ExceptionModel() { Code = 40000, Message = typeEx.Message, LogType = LogType.NoLog, Errors = typeEx.Errors }; return(model); }), new ExceptonTypeModel(typeof(Exception), (exception) => { var model = new ExceptionModel() { Code = 50000, Message = exception.Message, LogType = LogType.LogFullException | LogType.LogPostData | LogType.LogTraceId }; if (exception is IMultiError multi) { model.Errors = multi.Errors; } return(model); }) }; typeModels = Combine(baselist, options.ExceptionTypes); } List <ExceptonTypeModel> Combine(List <ExceptonTypeModel> baselist, List <ExceptonTypeModel> list) { if (list == null) { return(baselist); } for (int i = 0; i < list.Count; i++) { var typeModel = list[i]; bool flag = false; for (int j = 0; j < baselist.Count; j++) { var typeModel1 = baselist[j]; if (typeModel.ExceptionType == typeModel1.ExceptionType) { baselist[j] = typeModel; flag = true; break; } else if (typeModel.ExceptionType.IsSubclassOf(typeModel1.ExceptionType)) { baselist.Insert(j, typeModel); flag = true; break; } } if (!flag) { baselist.Add(typeModel); } } return(baselist); }
public void LogError(HttpContext httpContext, Exception exception, ExceptionModel model, ErrorResult result) { bool logMessage = (model.LogType & LogType.LogMessage) == LogType.LogMessage; bool logPostData = (model.LogType & LogType.LogPostData) == LogType.LogPostData; bool logFullException = (model.LogType & LogType.LogFullException) == LogType.LogFullException; bool logTraceId = (model.LogType & LogType.LogTraceId) == LogType.LogTraceId; bool log = logMessage || logPostData || logFullException || logTraceId; if (logger != null && log) { var user = httpContext.GetAccount(); var action = httpContext.Request.Method + " " + httpContext.Request.Path.Value; if (httpContext.Request.QueryString.HasValue) { action += " " + httpContext.Request.QueryString.Value; } var token = httpContext.GetToken(); var sb = new StringBuilder(); sb.Append($"type:\"{exception.GetType().FullName}\""); sb.Append($",message:\"{FormatString(exception.Message)}\""); sb.Append($",action:\"{FormatString(action)}\""); if (token != null) { sb.Append($",token:\"{FormatString(token)}\""); } if (user != null) { sb.Append($",user:\"{FormatString(user)}\""); } sb.Append($",http_code:\"{model.HttpStatus}\""); if (logTraceId) { sb.Append($",traceid:\"{result.TraceId}\""); } sb.Append($",err_code:\"{result.Code}\",err_msg:\"{FormatString(result.Message)}\""); if (logPostData) { if (httpContext.Request.ContentLength.HasValue && httpContext.Request.ContentLength.Value > 0) { httpContext.Request.EnableRewind(); httpContext.Request.Body.Seek(0, 0); string content; using (StreamReader sr = new StreamReader(httpContext.Request.Body, Encoding.UTF8)) { content = sr.ReadToEnd(); } if (!string.IsNullOrEmpty(content)) { sb.AppendLine(); sb.AppendLine("***Post Data Start***"); sb.AppendLine(content); sb.AppendLine("***Post Data End***"); } } } if (!logFullException) { logger.LogError(sb.ToString()); } else { logger.LogError(exception, sb.ToString()); } } }