Example #1
0
        /// <summary>
        /// Обрабатывает исключение
        /// </summary>
        /// <param name="ex">исключение</param>
        public static void Handle(Exception ex)
        {
            if (ex == null)
            {
                return;
            }

            try {
                if (OnExceptionHandler != null)
                {
                    OnExceptionHandler(ref ex);
                }
            }
            catch (Exception innerEx) {
                if (!ex.Data.Contains("OnExceptionHandler exception"))
                {
                    string sData = StringExtensions.SafeFormat(
                        "OnExceptionHandler exception in Handle():\r\nИсключение: {0}\r\nТип исключения:{1}\r\nИсточник:{2}\r\nПроизошло:\r\n{3}",
                        innerEx.Message, innerEx.GetType().Name, innerEx.Source, innerEx.StackTrace);
                    ex.Data.Add("OnExceptionHandler exception", sData);
                }
            }

            try {
                string sData = String.Empty;
                try {
                    foreach (var key in ex.Data.Keys)
                    {
                        sData += String.Format("\r\n\tKey: \"{0}\", Value: \"{1}\"; ", key.ToString(),
                                               (ex.Data[key] != null ? ex.Data[key].ToString() : String.Empty));
                    }
                }
                catch (Exception innerEx) {
                    sData = StringExtensions.SafeFormat(
                        "data exception in Handle():\r\nИсключение: {0}\r\nТип исключения:{1}\r\nИсточник:{2}\r\nПроизошло:\r\n{3}",
                        innerEx.Message, innerEx.GetType().Name, innerEx.Source, innerEx.StackTrace);
                }


                string message = StringExtensions.SafeFormat(CultureInfo.CurrentCulture,
                                                             "\r\nИсключение: {0}\r\nТип исключения:{1}\r\nИсточник:{2}\r\nПроизошло:\r\n{3}\r\nПользовательские данные:{4}\r\n",
                                                             ex.Message, ex.GetType().Name, ex.Source, ex.StackTrace, sData);

                string innerExpMsg = ex.GetInnerMessage();

                message += innerExpMsg;

                if (String.IsNullOrEmpty(message) || message.IsEqual(StringExtensions.ExceptionInFormat))
                {
                    message += "\r\n";
                    message += (ex.Message + ";;; " + ex.GetType().Name + ";;; " + ex.Source + ";;; " + ex.StackTrace);
                }

                AddIfNeeded(message);

                try {
                    DebugLogger.WriteError(StringExtensions.SafeFormat("{0}\r\n", message));
                }
                catch (Exception innerEx) {
                    sData = StringExtensions.SafeFormat(
                        "log exception in Handle():\r\nИсключение: {0}\r\nТип исключения:{1}\r\nИсточник:{2}\r\nПроизошло:\r\n{3}",
                        innerEx.Message, innerEx.GetType().Name, innerEx.Source, innerEx.StackTrace);
                    AddIfNeeded(message + sData);
                }
            }
            catch (Exception innerEx) {
                var sData = StringExtensions.SafeFormat(
                    "exception in Handle():\nИсключение: {0}\nТип исключения:{1}\nИсточник:{2}\nПроизошло:\n{3}",
                    innerEx.Message, innerEx.GetType().Name, innerEx.Source, innerEx.StackTrace);

                try {
                    DebugLogger.WriteError(String.Format("{0}", sData));
                }
                catch (Exception subInnerEx) {
                    var sSubData = StringExtensions.SafeFormat(
                        "log exception in Handle():\nИсключение: {0}\nТип исключения:{1}\nИсточник:{2}\nПроизошло:\n{3}",
                        subInnerEx.Message, subInnerEx.GetType().Name, subInnerEx.Source, subInnerEx.StackTrace);
                    AddIfNeeded(sData);
                    AddIfNeeded(sSubData);
                    return;
                }

                AddIfNeeded(sData);
            }
        }