/// <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); } }