目前,我正在寻求提供自定义500错误页面,以及记录并提醒网站管理员有关所遇到的情况(什么URL,堆栈跟踪,时间戳等)。
我在系统配置下尝试定义自定义http错误,但错误页面没有被点击。 我能够处理404s及其相关错误(layoutnotfound)。
我应该拦截global.asax中的上下文来处理500个错误并返回自定义页面吗? Sitecore有另一种方法可以实现我正在寻找的东西吗?
主要是,我正在寻找使用Sitecore
记录500个错误的最佳做法答案 0 :(得分:5)
答案 1 :(得分:5)
Elmah很棒,做得很好。您还可以使用log4net来记录异常。您所做的只是在global.asax中添加application_error方法,您可以跟踪发生的所有错误。您还可以添加不同的appender,并可以在日志文件,数据库和电子邮件中记录消息。
以下是记录错误的代码,并包含一些其他信息,如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解决方案。
答案 2 :(得分:0)
我尝试定义自定义http错误 在系统配置下,但是 错误页面没有被击中。我能够 处理404s及其相关错误 (layoutnotfound)。
在那一点上......请注意,本地访问时自定义错误的行为会有所不同。此外,默认情况下,您需要为这些页面使用物理文件(而不是sitecore页面)。返回超过200的状态代码时,您需要了解IIS行为,以及它如何依赖于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响应。