2009-09-02 66 views
25

您可以指點我一些教程或示例,瞭解如何使用log4net記錄我的mvc web應用程序中發生的所有未處理的異常。謝謝log4net記錄所有未處理的應用程序錯誤

+3

您可能會或可能不會發現這個有趣的(我不知道這是否會與log4net的工作):ELMAH - http://code.google.com/p/elmah/ –

+0

謝謝!在處理這個問題時,我實際上也將我的應用程序吸引到了Elmah,並且我非常喜歡它的便捷接口。我看到我的自己使用它比現在更多的log4網,但我會看到如何與更多的經驗.. – kaivalya

回答

49

我貼我在我的Global.asax中使用的代碼,似乎滿足我現在下面..我的log4net產生的日誌文件,我得到所有未處理的異常..

public class MvcApplication : System.Web.HttpApplication 
    { 

     private static readonly ILog log = LogManager.GetLogger(typeof(MvcApplication)); 

     void Application_Error(Object sender, EventArgs e) 
     { 
      Exception ex = Server.GetLastError().GetBaseException(); 

      log.Error("App_Error", ex); 
     } 


     public static void RegisterRoutes(RouteCollection routes) 
     { 
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

      routes.MapRoute(
       "Default", 
       "{controller}/{action}/{id}", 
       new { controller = "Home", action = "Index", id = "" } 
      ); 

     } 

     protected void Application_Start() 
     { 
      RegisterRoutes(RouteTable.Routes); 
      log4net.Config.XmlConfigurator.Configure(); 

     } 

    } 
+2

你也可以使用HttpModule來註冊錯誤事件處理程序:http://codebetter.com/blogs/karlseguin/archive/2006/06/12/146356.aspx – dahlbyk

+1

您需要添加 'routes.IgnoreRoute(「{* favicon}」,new {favicon = @「(。* /)?favicon.ico(/.*)?」});'如果您的站點中沒有圖標,則返回RegisterRoutes方法 – Tr1stan

+0

關於HttpModule:註冊模塊的方法詳細在鏈接的文章中適用於舊的經典IIS管道模式,而不是(現在推薦的)集成模式。有關如何使用集成模式註冊的詳細信息,請參閱https://msdn.microsoft.com/library/ms227673(v=vs.100).aspx。 – personne3000

2

沒有face 。

 try 
     { 
      NotImplementedException nie = new NotImplementedException(); 
      throw nie; 
     } 
     catch (Exception e) 
     { 
      Log.Fatal(e); 
     } 

假設你使用的是.NET 3.5,你可以使用擴展方法,延長的System.Exception並添加日誌(log4net.ILog日誌)方法,那麼無論你捕捉異常在你的應用程序,假設你已經正確設置了Log實例,那麼你很容易就做到了。您的擴展類可能會增長很多,並且會出現調試,信息,警告,錯誤和致命等各種過載。

+0

對不起,我的問題並不清楚 - 我需要記錄所有未處理的異常 – kaivalya

2

您可能有興趣查看Aspect Oriented Programming(AOP)是什麼。

我們用Post sharp(僅限 - 我們沒有使用log4net,而是使用自定義示蹤劑)完成了這項工作。

如果log4net沒有這個「開箱即用」功能,請先檢查一下。對此我不確定。

2

在log4net中沒有對此的內置支持。您應該在Global.asax中執行the Application_Error event並在那裏調用您的log4net記錄器。該事件將觸發您的應用中所有未處理的事件。

5

對於ASP.NET您喜歡使用System.Web.HttpApplication.Error事件的應用程序,該事件位於Global.asax文件中。

protected void Application_Error(Object sender, EventArgs e) 
{ 
    Exception ex = Server.GetLastError(); 

    // Stop error from displaying on the client browser 
    Context.ClearError(); 

    logger.Fatal(ex.ToString); 

} 

Managing unhandled exceptions

相關問題