Я бы порекомендовал обернуть звонок в Elmah в свой собственный простой класс-обертку.
using Elmah;
public static class ErrorLog
{
/// <summary>
/// Log error to Elmah
/// </summary>
public static void LogError(Exception ex, string contextualMessage=null)
{
try
{
// log error to Elmah
if (contextualMessage != null)
{
// log exception with contextual information that's visible when
// clicking on the error in the Elmah log
var annotatedException = new Exception(contextualMessage, ex);
ErrorSignal.FromCurrentContext().Raise(annotatedException, HttpContext.Current);
}
else
{
ErrorSignal.FromCurrentContext().Raise(ex, HttpContext.Current);
}
// send errors to ErrorWS (my own legacy service)
// using (ErrorWSSoapClient client = new ErrorWSSoapClient())
// {
// client.LogErrors(...);
// }
}
catch (Exception)
{
// uh oh! just keep going
}
}
}
Тогда просто звоните, когда вам нужно записать ошибку.
try {
...
}
catch (Exception ex)
{
// log this and continue
ErrorLog.LogError(ex, "Error sending email for order " + orderID);
}
Это имеет следующие преимущества:
- Вам не нужно помнить этот слегка архаичный синтаксис вызова Elmah
- Если у вас много DLL, вам не нужно ссылаться на Elmah Core из каждой отдельной библиотеки - и просто поместите это в свою собственную «Системную» DLL.
- Если вам когда-либо понадобится выполнить какую-либо специальную обработку или просто захотите поставить точку останова для отладки ошибок, у вас все это в одном месте.
- Если вы когда-нибудь отойдете от Эльмы, вы можете просто поменять одно место.
- Если у вас есть устаревшая регистрация ошибок, которую вы хотите сохранить (у меня просто есть простой механизм регистрации ошибок, связанный с некоторыми пользовательскими интерфейсами, которые я не могу сразу удалить).
Примечание. Я добавил свойство contextualMessage для контекстной информации. Вы можете опустить это, если хотите, но я нахожу это очень полезным. Elmah автоматически разворачивает исключения, поэтому основное исключение все равно будет отображаться в журнале, но contextualMessage будет виден, когда вы щелкнете по нему.