Asp.net mvc 3 在MVC 3应用程序中使用log4net在何处捕获异常?
我在全局文件中放置了以下代码以捕获mvc应用程序中的异常:Asp.net mvc 3 在MVC 3应用程序中使用log4net在何处捕获异常?,asp.net-mvc-3,logging,exception-handling,log4net,Asp.net Mvc 3,Logging,Exception Handling,Log4net,我在全局文件中放置了以下代码以捕获mvc应用程序中的异常: void Application_Error(Object sender, EventArgs e) { Exception ex = Server.GetLastError().GetBaseException(); log.Error("Exception", ex); } 以及以下内容来跟踪控制器的名称: public override void
void Application_Error(Object sender, EventArgs e)
{
Exception ex = Server.GetLastError().GetBaseException();
log.Error("Exception", ex);
}
以及以下内容来跟踪控制器的名称:
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (log.IsDebugEnabled)
{
var loggingWatch = Stopwatch.StartNew();
filterContext.HttpContext.Items.Add(StopwatchKey, loggingWatch);
var message = new StringBuilder();
message.Append(string.Format("Executing controller: {0}, action: {1}",
filterContext.ActionDescriptor.ControllerDescriptor.ControllerName,
filterContext.ActionDescriptor.ActionName));
log.Debug(message);
}
}
我还可以做些什么来捕获涉及数据库、安全性(如无法连接到ldap)、数据问题/转换等的错误?第二个代码片段可以添加到全局操作筛选器(在
global.asax中注册)。第一个代码片段可以添加到单独的IHttpModule
实现中,以将其从global.asax中删除
除此之外,您还向捕获所有异常的两个位置添加了代码。第一个将为所有与MVC无关的异常调用,而后一个仅为MVC异常调用(路由除外)只是想知道如何处理将日志放置在DAL和helper类中?您不知道(除非您处理它们:)。这些错误将被错误过滤器捕获。好的,这对于异常是有意义的。对每个方法进行跟踪是否是一种好的做法,例如:log.Info('Executing GetAgency(id)')?仅当您的方法不健壮时。相反,总是为合理的数据验证方法参数要好得多(如果某个参数无法验证,则抛出一个参数异常)。这样,您可能会在调用堆栈中得到更高级别的异常。这使得调试变得更加容易。只是想知道我如何处理在DAL和helper类中放置日志记录?