log4net记录所有未处理的应用程序错误

你能指点我一些关于如何使用log4net记录我的mvc web应用程序上发生的未处理exception的教程或示例。 谢谢

我粘贴在我的global.asax上使用的代码下面,这似乎现在让我满意..我在我的log4net生成的日志文件中得到所有未处理的exception..

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

对于ASP.NET应用程序,您喜欢使用放在Global.asax文件中的System.Web.HttpApplication.Error事件。

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

watch 管理未处理的exception

您可能有兴趣查看面向方面编程 (AOP)是什么。

我们用Post sharp完成了这个(只有 – 我们没有使用log4net而是自定义跟踪器)。

如果log4net没有这个“开箱即用”的东西,请先检查一下。 对此我不确定。

在log4net中没有对此的内置支持。 您应该在Global.asax中实现Application_Error事件并在那里调用log4net记录器。 将针对您应用中的所有未处理事件触发该事件。

这里没有滑稽,你去吧 。

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

假设您正在使用.net 3.5,您可以使用扩展方法,并扩展System.Exception并添加Log(log4net.ILog日志)方法,然后在应用程序中捕获exception的任何地方,假设您已正确设置Log实例,那么你很容易做到。 您的扩展类可能会增长很多,包括Debug,Info,Warn,Error和Fatal等各种重载。