Sitecore 500 Регистрация ошибок / оповещения - PullRequest
3 голосов
/ 13 мая 2011

Проблема

В настоящее время я пытаюсь обслуживать пользовательскую страницу с ошибкой 500, а также регистрировать и оповещать веб-мастера об обнаруженном условии (какой URL, трассировка стека, метка времени и т. Д.).

Я попытался определить пользовательские ошибки http в конфигурации системы, но страницы ошибок не были найдены.Я могу обработать 404 и связанные с ними ошибки (layoutnotfound).

Вопрос

Должен ли я перехватывать контекст в global.asax для обработки 500 ошибок и возврата пользовательской страницы?Есть ли другой способ с Sitecore добиться того, что я ищу?

В основном, я ищу лучшую практику регистрации / оповещения для 500 ошибок с Sitecore

Ответы [ 3 ]

5 голосов
/ 14 мая 2011

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

Вот код, который регистрирует ошибку и включает в себя некоторую дополнительную информацию, такую ​​как url ​​и текущий элемент sitecore:

        private static readonly ILog log = LogManager.GetLogger(typeof(Global));
        protected void Application_Error(object sender, EventArgs e)
        {
            if (Context != null)
            {
                Exception error = Context.Server.GetLastError().GetBaseException();
                log.Fatal(
                    GetErrorMessage(), error);
            }
        }
        private string GetErrorMessage()
        {
            StringBuilder sb = new StringBuilder();
            sb.AppendLine("Application_Error: Unhandled exception has been occured.");
            try
            {
                sb.AppendLine("Current Request: " + Context.Request.RawUrl);
                Sitecore.Data.Items.Item currentItem = Sitecore.Context.Item;
                if (currentItem != null)
                    sb.AppendLine(String.Format("Current Item ({0}): {1}", currentItem.ID, currentItem.Paths.FullPath));
                if (Sitecore.Context.Database != null)
                    sb.AppendLine("Current Database: " + Sitecore.Context.Database.Name);
            }
            catch { } // in no way should we prevent the site from logging the error
            return sb.ToString();

        }

Если вы хотите простое решение, я бы порекомендовал пойти с Elmah.Если вы хотите иметь больше контроля и больше возможностей ведения журналов, вам следует использовать собственное решение для log4net.

5 голосов
/ 13 мая 2011

Попробуйте использовать ELMAH .

Здесь - статья по использованию его с Sitecore.

0 голосов
/ 17 мая 2011

Я попытался определить пользовательские ошибки http в конфигурации системы, но страницы ошибок не были найдены.Я могу обрабатывать 404 и связанные с ними ошибки (layoutnotfound).

В этот конкретный момент ... Помните, что пользовательские ошибки ведут себя по-разному при локальном доступе.Также по умолчанию вам нужно использовать физические файлы (не страницы sitecore) для этих страниц.Вам необходимо знать о поведении IIS при возврате кодов состояния более 200 и о том, как оно зависит от конфигурации в web.config и (если работает в интегрированном режиме) раздела.В частности, см. Блок-схему на полпути вниз по первой ссылке ниже.

http://learn.iis.net/page.aspx/267/how-to-use-http-detailed-errors-in-iis-70/ http://www.iis.net/ConfigReference/system.webServer/httpErrors http://msdn.microsoft.com/en-us/library/ms689487(v=VS.90).aspx

Возможно, вы также захотите изменить параметр RequestErrors.UseServerSideRedirectв "true", чтобы обеспечить лучшие ответы HTTP без перенаправлений.

...