Лучшие способы уменьшить объем при отправке по электронной почте необработанного исключения - PullRequest
0 голосов
/ 03 июня 2011

Я подумываю добавить некоторый код в мой global.asax в мои веб-приложения, чтобы отправить мне электронное письмо, когда есть необработанное исключение.

Тока, я делаю следующее

  • Запись куки на компьютере пользователя - в случае, если спам нажал F5 и сайт был перезапущен
  • Добавление записи в system.Web.Cache -

Я что-то упустил? Вы бы сделали что-то другое?

protected void Application_Error()
{
    var ex = Server.GetLastError();
    Server.ClearError();

    if (NotInCache(ex))
    {
        // Email support
    }
}



private static bool NotInCache(Exception ex)
{
    bool returnValue = true;

        if (ex != null)
        {
            HttpContext current = HttpContext.Current;
            LogWriter.Trace(MethodBase.GetCurrentMethod(), Dfait.Diagnostics.TraceLevel.Level4, "Checking Cache for our exception");

            if (current != null)
            {
                string key = ex.StackTrace;
                string[] split = System.Text.RegularExpressions.Regex.Split(ex.StackTrace, "\r\n");
                string value = "Exception Exists";
                DateTime expiryDate = DateTime.Now.AddDays(1);

                if (split.Length > 0)
                {
                    key = split[0];
                }

                key = key.Trim();

                HttpCookie remedyCookie = current.Request.Cookies[key];

                if (remedyCookie == null)
                {
                    HttpCookie newCookie = new HttpCookie(key, value);
                    newCookie.Expires = expiryDate;
                    current.Response.Cookies.Add(newCookie);
                }
                else
                {
                    returnValue = false;
                }

                // The next block is to check the cache of the user.
                object foundCache = HttpRuntime.Cache[key];

                if (foundCache == null)
                {
                    HttpRuntime.Cache.Insert(key, value, null, expiryDate, TimeSpan.Zero);
                }
                else
                {
                    returnValue = false;
                }
            }
        }

    return returnValue;
}

Ответы [ 2 ]

2 голосов
/ 03 июня 2011

В зависимости от того, как скоро вы захотите получить исключения, вы всегда можете просто записать их в файл, а затем отправить его себе по электронной почте каждые 10 минут, 1 час, 1 день и т. Д.

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

После того, как вы отправите файл, вы можете удалить его или кое-как пометить его как отправленный, а затем запустить новый файл таким образом, что вы получите файл только по электронной почте, когда будет отправлено что-то новое.

1 голос
/ 03 июня 2011

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

У меня есть похожая настройка процесса с использованием Elmah (вы должны изучить его), и я могу вам сказать, что если бы у меня был фильтр, как вы предлагаете, я бы пропустил важный информация, помогающая диагностировать проблемы.

То, что я говорю, это то, что в конечном итоге он проглотит некоторые исключения, которые вы не хотели.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...