/// <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);
        }
Exemplo n.º 2
0
        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());
                }
            }
        }