Должен ли я ловить исключения только для их регистрации? - PullRequest
27 голосов
/ 18 сентября 2008

Должен ли я перехватывать исключения для целей регистрации?

public foo(..)
{
   try
   {
     ...
   } catch (Exception ex) {
     Logger.Error(ex);
     throw;
   }
}

Если у меня есть это на каждом из моих уровней (DataAccess, Business и WebService), это означает, что исключение регистрируется несколько раз.

Имеет ли смысл делать это, если мои слои находятся в отдельных проектах и ​​только в общедоступных интерфейсах есть try / catch в них? Зачем? Почему бы и нет? Могу ли я использовать другой подход?

Ответы [ 15 ]

0 голосов
/ 18 сентября 2008

Это зависит от Исключения: если этого не произойдет, я определенно запишу это. С другой стороны: если вы ожидаете этого исключения, вам следует подумать о дизайне приложения.

В любом случае: вы должны хотя бы попытаться указать Исключение, которое хотите отбросить, перехватить или записать в журнал.

public foo(..)
{
   try
   {
     ...
   }
   catch (NullReferenceException ex) {
     DoSmth(e);
   }
   catch (ArgumentExcetion ex) {
     DoSmth(e);
   }
   catch (Exception ex) {
     DoSmth(e);
   }
}
0 голосов
/ 18 сентября 2008

Мой метод состоит в том, чтобы регистрировать исключения только в обработчике. «Настоящий» обработчик, так сказать. В противном случае журнал будет очень трудно читать, а код будет менее структурированным.

0 голосов
/ 18 сентября 2008

Если это единственное, что он делает, я думаю, что лучше удалить try / catch из этих классов и разрешить исключение для класса, который отвечает за их обработку. Таким образом, вы получаете только один журнал на исключение, что дает вам более четкие журналы, и даже вы можете регистрировать трассировку стека, чтобы вы не пропустили, откуда возникло исключение.

0 голосов
/ 18 сентября 2008

Возможно, вы захотите войти на самом высоком уровне, которым обычно является ваш пользовательский интерфейс или код веб-службы. Многократная регистрация - это пустая трата времени. Кроме того, вы хотите узнать всю историю, когда смотрите на журнал.

В одном из наших приложений все наши страницы являются производными от объекта BasePage, и этот объект обрабатывает обработку исключений и регистрацию ошибок.

0 голосов
/ 18 сентября 2008

Если вам необходимо регистрировать все исключения, тогда это фантастическая идея. Тем не менее, регистрация всех исключений без какой-либо другой причины не является хорошей идеей.

...