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

时间:2009-09-02 14:15:13

标签: c# asp.net asp.net-mvc logging log4net

您能否指点我一些教程或示例,了解如何使用log4net记录我的mvc Web应用程序上发生的所有未处理的异常。谢谢

5 个答案:

答案 0 :(得分:51)

我在我的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();

        }

    }

答案 1 :(得分: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

答案 2 :(得分:2)

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

我们用Post sharp完成了这项工作(仅限 - 我们没有使用log4net,而是使用自定义跟踪器)。

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

答案 3 :(得分:2)

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

答案 4 :(得分:1)

没有滑稽here you go

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

假设您使用的是.net 3.5,您可以使用扩展方法,并扩展System.Exception并添加Log(log4net.ILog日志)方法,然后在应用程序中捕获异常的任何地方,假设您已设置正确记录实例,然后您可以轻松完成。您的扩展类可能会增长很多,包括Debug,Info,Warn,Error和Fatal等各种重载。