2014-10-20 2 views
0

Я использую Elmah для сообщения об ошибках в своих приложениях.Что делать, если код выписки вызывает ошибку?

Обычно, если есть ошибка, я поймаю его, создаю пользовательское сообщение и отбрасываю его снова.

catch (Exception ex) 
{ 
    var e = new Exception("Failed to get Intake Statuses <br />" 
+ " (@PageNumber = " + pageNumber + ", @PageSize = " + pageSize + ".<br />" 
+ " Error: " + ex); 

    ErrorLogger.LogErrorManually(e); 

    throw new Exception(e.Message); 
} 

Теперь проблема возникает, если в пользовательской ошибке, которую я создал, возникает ошибка.

Каковы наилучшие методы управления этим? Создать другой суб Try/Catch?

+0

Является ли 'LogErrorManually' склонным к метанию? Возможно, он должен попробовать/поймать себя. В противном случае, похоже, вам не нужно беспокоиться об этом. Если вы это сделали, другая попытка/улов звучит как ваш лучший выбор. – BradleyDotNET

+0

У метода, вызывающего это, есть 'try ... catch'? – Mephy

+10

Выброс нового исключения приведет к потере трассировки стека. Вместо этого вместо этого нужно просто «бросить» или выбросить новое исключение, которое включает в себя исходное исключение как внутреннее исключение. –

ответ

1

Вы можете сделать следующее:

  1. Создайте метод замолвите с попыткой поймать и позволяет называть вашу функцию, чей уловом вы дали в описании, как Б.
  2. В вашем B улове просто использовать бросить так что ваша трассировка стека не исчезнет.
  3. Об исключении в B catch он будет перемещаться, чтобы поймать A, и таким образом вы можете показать сообщение по своему усмотрению.
+0

Было бы намного лучше, если бы это объяснялось с помощью примера кода. –

+1

Мне потребовалось немного чтения, чтобы понять, но это имеет смысл. Пример кода, хотя был бы идеальным для всех, кто наткнулся на этот вопрос. После этого я буду отмечать это как ответ. – ArjaaAine