Я использую ELMAH для моего журнала регистрации проектов ASP.NET MVC, я настроил его так, чтобы он регистрировал исключения в базе данных, но моя проблема заключается в том, что произошло исключение, и пользователь обновляет страницу по любой причине (возможно, думая, что обновляя страницу, страница может стать доступной) при каждом обновлении, одна запись вставляется в базу данных, я боюсь, что это может привести к ее очень большой таблице (я закрыл ELMAH только для сохранения последних 90 дней, но это все равно может стать слишком большим), мне было интересно, есть ли способ ограничить количество занесенных в журнал исключений, входящих в одну и ту же страницу за определенный промежуток времени.Как остановить регистрацию ELMAH с тем же исключением при обновлении?
1
A
ответ
1
В конечном итоге то, что я закончил делать, это запрос к базе данных, и если TimeUtc
последнего исключения составлял менее 5 минут назад, а его сообщение было таким же, как в настоящее время, исключение, я уволил журнал, вот пошаговое руководство о том, что я сделал:
- Сначала установите This package что добавить
ELMAH_Errors
таблицы и объект для запросаELMAH_Errors
таблицы с помощью EF - чем вы можете использовать структуру сущностей для манипулирования
ELMAH_Errors
таблицы
в Global.asax
добавить этот код:
void ErrorLog_Filtering(object sender, ExceptionFilterEventArgs e)
{
using (var context = new ElmahContext())
{
var lastErr = context.ELMAH_Errors.OrderByDescending(m => m.TimeUtc).Take(1).SingleOrDefault();
if (lastErr != null &&
(e.Exception.Message == lastErr.Message && lastErr.TimeUtc > DateTime.UtcNow.AddMinutes(-5)))
{
e.Dismiss();
}
}
Вы также можете добавить этот код для ErrorMail_Filtering
, также здесь another approach, но сделать это таким образом, что независимо от того, что не является ошибкой, и где он занесен в журнал регистрации ELMAH в течение определенного периода времени, мой подход не самый лучший, но он все еще проигрывает получение записи при каждом обновлении.