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

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

第三步:Web.config

<configuration>
<configSections>
<section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>
</configSections>
<log4net>
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="logs/"/>
<appendToFile value="true"/>
<rollingStyle value="Date"/>
<datePattern value="yyyy-MM-dd.TXT"/>
<staticLogFileName value="false"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date ThreadID:[%thread] Log Level:%-5level Class:%logger Desp:%message%newline"/>
</layout>
</appender>
<root>
<appender-ref ref="LogFileAppender"/>
</root>
</log4net>
</cconfiguration>

第四步: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"
}, ); filters.Add(new HandleErrorAttribute(), );
}

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

现在我们把 web.config 的

<customErrors mode="On">
</customErrors>
改成
<customErrors mode="On" defaultRedirect="GenericErrorPage.htm">
<error statusCode="404" redirect="~/error/notfound"></error>
</customErrors>

 有两个重点是

如果 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); 批注掉就行了。 

 

MVC4下配置log4net 五部曲的更多相关文章

  1. .Net WinForm下配置Log4Net(总结不输出原因)

    最近做一个winform项目,配置了Log4net 但是总是不能输出,搜索了很多文章加上自己的探索发现自己在项目中添加的 Log4Net.config 生成时没有被复制到Debug文件夹下, 所以程序 ...

  2. Log4Net五部曲

    本文主要讲述如何构建封装一个日志工具类,以及在该过程中遇到的问题, 关于Log4Net的介绍,就不详细赘述了,更多详细的技术可参考http://www.cnblogs.com/kissazi2/p/3 ...

  3. 快速入门系列--WebAPI--04在老版本MVC4下的调整

    WebAPI是建立在MVC和WCF的基础上的,原来微软老是喜欢封装的很多,这次终于愿意将http编程模型的相关细节暴露给我们了.在之前的介绍中,基本上都基于.NET 4.5之后版本,其System.N ...

  4. 单元测试中如何配置log4net

    按道理来说,单元测试中基本没有对于日志的需求,这是由于单元测试的定位来决定的. 因为单元测试的思想就是针对的都是小段代码的测试,逻辑明确,如果测试运行不通过,简单调试一下,就能很容易地排查问题.但是单 ...

  5. wince平台下使用log4net记录日志

    前面我写过一篇文章是来介绍windows平台下开发软件使用log4net来记录日志的,详情请参考:用一个简单的示例说明日志记录组件log4net的使用. 我们在wince平台下开发程序也一样需要日志文 ...

  6. 在ASP.NET MVC4中配置Castle

    ---恢复内容开始--- Castle是针对.NET平台的一个非常优秀的开源项目,重点是开源的哦.它在NHibernate的基础上进一步封装,其原理基本与NHibernate相同,但它较好地解决NHi ...

  7. C#在window服务配置Log4Net.dll

    1.使用背景: C#window服务下添加一个日志记录程序集(Log4Net.dll) 2.添加和使用步骤如下: 一.下载并引入Log4Net.dll程序集到项目中 下载地址:http://loggi ...

  8. ASP.NET 配置log4net启用写错误日志功能

    http://www.cnblogs.com/yeminglong/archive/2013/05/21/3091192.html 首先我们到apche的官网下载log4net的项目编译得到log4n ...

  9. git提交代码五部曲

    From: https://jingyan.baidu.com/article/359911f5a4fe4b57fe03060d.html 正常使用git时,提交代码五部曲. 工具/原料   电脑 已 ...

随机推荐

  1. express创建项目

    sudo apt-get install node-express-generator dave@voctrals:~/WebstormProjects/nodejs-study/express$ e ...

  2. 什么是 Web API

    http://www.cnblogs.com/developersupport/p/aspnet-webapi.html Web API 强势入门指南 Web API是一个比较宽泛的概念.这里我们提到 ...

  3. SQL Server:排名函数row_number,rank,dense_rank,ntile详解

    1.Row_Number函数 row_number函数大家比较熟悉一些,因为它的用途非常的广泛,我们经常在分页与排序中用到它,它的功能就是在每一行中生成一个连续的不重复的序号 例如: select S ...

  4. struts1 Demo

    每次都会忘记一些东西,反复查找原因,其实struts1很简单,可是不去巩固也很容易忘记并且犯错误.这是一个最简单的登录Demo. 1.建立web工程,引入struts1.2包 2.建package:a ...

  5. 【uTenux实验】消息缓冲区

    uTenux的消息缓冲区是一个通过传递大小可变的消息来实现同步和通信的对象. 消息缓冲区由三部分组成:1.待发消息队列  2.等接收消息的任务队列  3.用来保存缓冲消息的空间. 和信号相比,消息队列 ...

  6. 【巩固】CSS3的animation基础

    终于结束了最后css3的一节课,关于animation的使用,其实之前已经用过一次.大致要了解的就是,关于如何让动画停在最后一帧的方法.视频里有提到过css3出了个新的样式可以实现,但是老师没有记住, ...

  7. javascript 使用btoa和atob来进行Base64转码和解码

    javascript原生的api本来就支持,Base64,但是由于之前的javascript局限性,导致Base64基本中看不中用.当前html5标准正式化之际,Base64将有较大的转型空间,对于H ...

  8. 圆内接三角形(X神的代码玩的真好)

    设$S$为半径等于$1$的圆内接三角形的面积,则$4S+\dfrac 9S$的最小值是_______. [分析与解] 先证明$S$的最大值为$\dfrac{3\sqrt 3}4$.设$\triangl ...

  9. GC之六--SystemGC完全解读

    概述 JVM的GC一般情况下是JVM本身根据一定的条件触发的,不过我们还是可以做一些人为的触发,比如通过jvmti做强制GC,通过System.gc触发,还可以通过jmap来触发等,针对每个场景其实我 ...

  10. day8-多进程和多线程

    Python线程 Threading用于提供线程相关的操作,线程是应用程序中工作的最小单元. import threading import time def sayhi(num): #定义每个线程要 ...