我正在试图找出一种方法来捕获网站上的所有异常并存储它们,问题是我不想去尝试捕获所有内容。
我已经找到了自定义错误页面的解决方案而且我正在这样做,但我想以管理员的身份知道用户何时遇到错误,以及出现了什么错误。我知道必须有一种方法可以全局获取所有异常并存储它们。
我一直在寻找一种解决方案,或者至少在某种程度上以正确的方式指出了几天,但我所发现的只是笨拙的方式。
所以我的问题是。有一站式商店吗?我可以捕获异常并在一个地方执行存储过程而不向我的解决方案中的每个类添加内容吗?在那种情况下,我在哪里运行我的存储过程?
答案 0 :(得分:2)
将Global.asax文件添加到您的asp.net项目并处理应用程序错误:
void Application_Error(object sender, EventArgs e)
{
Exception ex = Server.GetLastError();
string errorMessage = "Application Exception: " + ex.Message;
if (ex.InnerException != null)
{
errorMessage += Environment.NewLine + "Inner Exception: " + ex.InnerException.Message;
}
if (Context != null && Context.Request != null)
{
errorMessage += Environment.NewLine + "Absolute Url: " + Context.Request.Url.AbsolutePath;
}
Services.LoggerManager.Log(
Services.LoggerManager.eLogContext.Application,
Services.LoggerManager.eLogType.Error,
Context, errorMessage);
}
这是LoggerManager部分:
public static class LoggerManager
{
public enum eLogType
{
Information = 0,
Warning = 1,
Error = 2
}
public enum eLogContext
{
Application = 0,
Session = 1
}
/// <summary>
/// Method for logging custom message
/// </summary>
/// <param name="logContext"></param>
/// <param name="logType"></param>
/// <param name="context"></param>
/// <param name="message"></param>
public static void Log(eLogContext logContext, eLogType logType, HttpContext context, string message)
{
switch (logContext)
{
case eLogContext.Application:
//TODO: log application type event...
break;
case eLogContext.Session:
//TODO: log session type event...
break;
default:
throw new NotImplementedException("eLogContext '" + logContext.ToString() + "' is not implemented!");
}
}
}
答案 1 :(得分:1)
在Global.asax中,使用此事件
void Application_Error(object sender, EventArgs e)
以下是包含更多详情http://msdn.microsoft.com/en-us/library/24395wz3(v=vs.100).aspx
的链接答案 2 :(得分:1)
我建议您查看ELMAH http://code.google.com/p/elmah/
它非常受欢迎,也可以从nuget获得。它旨在非常容易地捕获和管理所有错误。如果您不想自己管理错误,我强烈推荐它。