Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 在MVC 3应用程序中使用log4net在何处捕获异常?_Asp.net Mvc 3_Logging_Exception Handling_Log4net - Fatal编程技术网

Asp.net mvc 3 在MVC 3应用程序中使用log4net在何处捕获异常?

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

我在全局文件中放置了以下代码以捕获mvc应用程序中的异常:

 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类中放置日志记录?