C# log4net记录所有未处理的应用程序错误
你能给我指一些教程或示例吗?关于如何使用log4net记录我的mvc web应用程序上发生的所有未处理的异常。谢谢你,别开玩笑了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) 我们通过(仅-我们没有
假设您使用的是.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);
}