2013-03-11 5 views
0

я поместил следующий код в глобальном файле поймать исключение в моем MVC приложения:Где ловить исключение, используя log4net в приложении MVC 3?

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); 
      } 
     } 

Есть еще я могу сделать, чтобы ошибки catch, связанные с db, безопасность (например, невозможно подключиться к ldap), проблемы с данными/литье и т. д.?

+0

Просто интересно, как мне обрабатывать размещение записей в DAL и вспомогательных классах? – Chaka

ответ

1

Второй фрагмент кода можно добавить в глобальный фильтр действий (зарегистрированный в global.asax). Первый фрагмент можно добавить к отдельной реализации IHttpModule, чтобы удалить его из global.asax.

Кроме того, вы добавили код в два места, где будут удалены все исключения. Первый будет вызываться для всех исключений, не связанных с MVC, в то время как более поздний - только для исключений MVC (исключение маршрутизации)

+0

Благодарим вас за понимание – Chaka

+0

Просто интересно, как мне обрабатывать размещение записей в DAL и вспомогательных классах? – Chaka

+0

У вас нет (если вы не справитесь с ними: http://blog.gauffin.org/2010/11/do-not-catch-that-exception). Эти ошибки будут улавливаться фильтром ошибок. – jgauffin