Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.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
C# log4net记录所有未处理的应用程序错误_C#_Asp.net_Asp.net Mvc_Logging_Log4net - Fatal编程技术网

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

C# log4net记录所有未处理的应用程序错误,c#,asp.net,asp.net-mvc,logging,log4net,C#,Asp.net,Asp.net Mvc,Logging,Log4net,你能给我指一些教程或示例吗?关于如何使用log4net记录我的mvc web应用程序上发生的所有未处理的异常。谢谢你,别开玩笑了 假设您使用的是.net 3.5,您可以使用扩展方法,扩展System.Exception并添加一个日志(log4net.ILog Log)方法,然后在应用程序中捕获异常的任何地方,假设您已正确设置日志实例,那么您都可以轻松地执行此操作。您的扩展类可能会有相当大的增长,包括调试、信息、警告、错误和致命等的各种重载。您可能有兴趣了解什么是(AOP) 我们通过(仅-我们没有

你能给我指一些教程或示例吗?关于如何使用log4net记录我的mvc web应用程序上发生的所有未处理的异常。谢谢你,别开玩笑了


假设您使用的是.net 3.5,您可以使用扩展方法,扩展System.Exception并添加一个日志(log4net.ILog Log)方法,然后在应用程序中捕获异常的任何地方,假设您已正确设置日志实例,那么您都可以轻松地执行此操作。您的扩展类可能会有相当大的增长,包括调试、信息、警告、错误和致命等的各种重载。

您可能有兴趣了解什么是(AOP)

我们通过(仅-我们没有使用log4net,而是使用定制跟踪器)实现了这一点


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

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

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

        }

    }

对于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);

}

观看

抱歉,我的问题不清楚-我需要记录所有未处理的例外情况您可能会觉得有趣,也可能不会觉得有趣(我不确定它是否适用于log4net):ELMAH-谢谢!在解决这个问题时,我还将我的应用程序连接到了Elmah,我非常喜欢它的便捷界面。现在,我认为我自己使用它比使用log4 net要多,但我将通过更多的经验来了解这一点。您还可以使用HttpModule来注册错误事件处理程序:您需要添加
routes.IgnoreRoute({*favicon}),new{favicon=@”(.*/)?favicon.ico(/.*)”
如果站点中没有favicon,请转到RegisterRoutes方法About HttpModule:链接文章中详细介绍的注册模块的方法适用于旧的经典IIS管道模式,而不是(现在推荐的)集成模式。有关使用集成模式时如何注册的详细信息,请参阅。在这种情况下,异常记录到哪里?
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);

}