Ну, потратив день на работу над этим, я решил поделиться своим решением. Очень похоже на решение Myster, описанное выше, с той разницей, что я изменяю объект ошибки, используемый elmah, вместо переменных сервера запросов, например:
public static void LogError(Exception e, IDictionary<string, string> customFields = null)
{
var logger = ErrorLog.GetDefault(HttpContext.Current);
customFields = customFields ?? new Dictionary<string, string>();
// Used to tell elmah not to log this twice (See global.asax)
e.Data.Add("Logged", true);
var error = new Error(e, HttpContext.Current);
customFields.ForEach(pair => error.ServerVariables.Add(pair.Key, pair.Value));
logger.Log(error);
}
Затем, в зависимости от вашего приложения, вызвать logger.LogError:
mvc добавить пользовательский фильтр ошибок (http://maheshde.blogspot.ca/2012/09/error-handing-with-mvc-using-custom.html)
переопределение веб-форм Application_Error в global.asax
Затем, только один последний шаг в global.asax, отклоните все ошибки, которые уже были зарегистрированы:
public void ErrorLog_Filtering(object sender, ExceptionFilterEventArgs e)
{
if (e.Exception.Data.Contains("Logged"))
{
if (e.Exception.Data["Logged"].Equals(true)) e.Dismiss();
}
}