博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MVC4下配置log4net 五部曲
阅读量:7282 次
发布时间:2019-06-30

本文共 2511 字,大约阅读时间需要 8 分钟。

第一步:把log4net.dll 编译成Framework 4.0

 

第二步:找到项目的Properties下的AssemblyInfo。在最下面添加:[assembly: log4net.Config.XmlConfigurator(Watch = true)]。

 

第三步:Web.config

 

 

第四步:Global.asax Applicatin_Start方法内添加:ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);

 

第五步:LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType).Error("logtest");

 

 

其它:全局性的 ERROR HANDLER

[ASP.NET MVC] Error Handling(3) – 全局性的 Error Handler

现在来看怎么让 HandleErrorAttribute 应用到整个网站?

只要定义全局性的 Error Handler 就行了。

在 /App_Start/FilterConfig.cs 里,里面会有一个 RegisterGlobalFilters() Method。

可以看到里面已经有一行 filters.Add(new HandleErrorAttribute()); 。
这行是预设的,意思就是他会捕捉到所有 Error,如果你在第一篇文章里,把这一行批注掉,那他无法捕捉 Error,最后就没办法显示我们自定义的 Error Page。

接着我们把第二章的程序改写在这边。

public static void RegisterGlobalFilters(GlobalFilterCollection filters){      filters.Add(new HandleErrorAttribute      {          ExceptionType = typeof(System.Data.DataException),          View = "DatabaseError"      });            filters.Add(new HandleErrorAttribute());}

这边要注意的是,他执行的顺序是由上而下的,当上面的 filter 无法捕捉错误 时,才会继续往下执行,而因为我们无法定义所有的错误,所以我们并不会把它默认的那一行程序删除,而是把我们的 filter 加在上面,这样才能确保抓到所有的错误。

而你也可以手动指定它们执行的顺序,只要加上第二个参数就行了。

public static void RegisterGlobalFilters(GlobalFilterCollection filters){      filters.Add(new HandleErrorAttribute      {          ExceptionType = typeof(System.Data.DataException),          View = "DatabaseError"      }, 1);            filters.Add(new HandleErrorAttribute(), 2);}

上面虽然写能抓到所有错误,但其实 HandleErrorAttribute 只能抓到 HTTP 500 系列的错误,如果像是 404 这种的就抓不到了,需要再另外定义。

现在我们把 web.config 的

改成
 
 有两个重点是
如果 web.config 有将 custom errors 设成 On,程序里面也有使用 HandleErrorAttribute,那在发生错误时,程序会自动导向到 Error.cshtml。
(它会在你当前页面的文件夹里寻找是否有 Error.cshtml ,如果找不到才会去 Views/Shared 里面找)
而忽略掉 customErrors 所设定的 defaultRedirect 跟里面的 <error statusCode="404" redirect="~/errortfound"></error>。 如果 web.config 有将 custom errors 设成 On,程序里面没有使用 HandleErrorAttribute,那在发生错误时,才会导向到 customErrors 所设定的 defaultRedirect 或里面的 <error statusCode="404" redirect="~/errortfound"></error>。
那如果要测试第二点,是不是要把 HandleErrorAttribute 的程序全删掉?
当然不用那么麻烦,只要把 Global.asax.cs 里面的 FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 批注掉就行了。 
 

转载于:https://www.cnblogs.com/fuyu-blog/p/4435426.html

你可能感兴趣的文章
web前端入门进阶教程:Vue 项目骨架屏注入实践
查看>>
你真的会用 CocoaPods 吗?
查看>>
Java并发编程知识概览(一)
查看>>
产品和行为规范的那些事
查看>>
关于 Xcode 9 拖入文件未生效的问题
查看>>
贝聊VPC迁移
查看>>
如何解决jquery.jsonp在并发下容易发生异常的bug
查看>>
Spring事务注解Transactional的正确使用姿势
查看>>
JS中的THIS处理及正则表达式 — 2、综合实战:华为商城产品排序
查看>>
『高级篇』docker之服务编排三大平台扬帆起航(21)
查看>>
ApplicationContext 与 BeanFactory 区别
查看>>
android常用设计模式之简单工厂模式
查看>>
【Python实战】用Scrapy编写“1024网站种子吞噬爬虫”,送福利
查看>>
关于mongodb的学习与探索一
查看>>
Zookeeper开发实例
查看>>
如何启用SAP C4C OData Event Notification
查看>>
Js传递数组参数到后台controller的方式
查看>>
名师课堂-Java高级开发
查看>>
2.1.3 Python面向对象之异常处理
查看>>
对话 | 浅析NEO的dBFT共识算法
查看>>