1.在MVC的Modal文件夹建一个异常处理过滤器

  1. public class MyExceptionAttribute:HandleErrorAttribute
  2. {
  3. public static Queue<Exception> ExceptionQueue = new Queue<Exception>();
  4. /// <summary>
  5. /// 捕获异常
  6. /// </summary>
  7. /// <param name="filterContext"></param>
  8. public override void OnException(ExceptionContext filterContext)
  9. {
  10. base.OnException(filterContext);
  11. Exception ex = filterContext.Exception;
  12. //写到队列
  13. ExceptionQueue.Enqueue(ex);
  14. //跳转到错误页面.
  15. filterContext.HttpContext.Response.Redirect("/Error.html");
  16. }
  17. }

2.在App_Start文件夹中建一个类,完成对上面新建的过滤器的注册

  1. public class FilterConfig
  2. {
  3. public static void RegisterGlobalFilters(GlobalFilterCollection filters)
  4. {
  5. // filters.Add(new HandleErrorAttribute());
  6. filters.Add(new MyExceptionAttribute());//注册过滤器MyExceptionAttribute
  7. }
  8. }

3.在Global文件中开启一个线程处理处理异常,放在application_start方法中

protected void Application_Start()
{

  1. log4net.Config.XmlConfigurator.Configure();//读取了配置文件中关于Log4Net配置信息.
  2. //开启一个线程,扫描异常信息队列。
  3. string filePath = Server.MapPath("/Log/");
  4. ThreadPool.QueueUserWorkItem((a) => {
  5. while (true)
  6. {
  7. //判断一下队列中是否有数据
  8. )
  9. {
  10. Exception ex=MyExceptionAttribute.ExceptionQueue.Dequeue();
  11. if (ex != null)
  12. {
  13. //将异常信息写到日志文件中。
  14. //string fileName = DateTime.Now.ToString("yyyy-MM-dd");
  15. //File.AppendAllText(filePath+fileName+".txt",ex.ToString(),System.Text.Encoding.UTF8);
  16. ILog logger = LogManager.GetLogger("errorMsg");
  17. logger.Error(ex.ToString());
  18. }
  19. else
  20. {
  21. //如果队列中没有数据,休息
  22. Thread.Sleep();
  23. }
  24. }
  25. else
  26. {
  27. //如果队列中没有数据,休息
  28. Thread.Sleep();
  29. }
  30. }
  31.  
  32. },filePath);
  33.  
  34. }}

4.在Web.Config (或App.Config)添加配置

  1. <configuration>
  2. <configSections>
  3. <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/><!--log4Net-->
  4. </configSections>
  5. <log4net><!--log4Net-->
  6. <!-- OFF, FATAL, ERROR, WARN, INFO, DEBUG, ALL -->
  7. <!-- Set root logger level to ERROR and its appenders -->
  8. <root>
  9. <level value="ALL"/>
  10. <appender-ref ref="SysAppender"/>
  11. </root>
  12.  
  13. <!-- Print only messages of level DEBUG or above in the packages -->
  14. <logger name="WebLogger">
  15. <level value="DEBUG"/>
  16. </logger>
  17.  
  18. <appender name="SysAppender" type="log4net.Appender.RollingFileAppender,log4net" >
  19. <param name="File" value="App_Data/" />
  20. <param name="AppendToFile" value="true" />
  21. <param name="RollingStyle" value="Date" />
  22. <param name="DatePattern" value="&quot;Logs_&quot;yyyyMMdd&quot;.txt&quot;" />
  23. <param name="StaticLogFileName" value="false" />
  24. <layout type="log4net.Layout.PatternLayout,log4net">
  25. <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
  26. <param name="Header" value="
  27. ----------------------header--------------------------
  28. " />
  29. <param name="Footer" value="
  30. ----------------------footer--------------------------
  31. " />
  32. </layout>
  33. </appender>
  34. <appender name="consoleApp" type="log4net.Appender.ConsoleAppender,log4net">
  35. <layout type="log4net.Layout.PatternLayout,log4net">
  36. <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
  37. </layout>
  38. </appender>
  39. </log4net>
  40.  
  41. </configuration>

5.添加对log4net.dll的引用(bin\net\2.0\release 不能引用debug版本)(把相应的dll文件拷贝到项目中的lib文件夹下。)

下面是老师写的Log4Net的配置

Log4Net是用来记录日志的,可以将程序运行过程中的信息输出到一些地方(文件、数据库、EventLog等),日志就是程序的黑匣子,可以通过
日志查看系统的运行过程,从而发现系统的问题。日志的作用:将运行过程的步骤、成功失败记录下来,将关键性的数据记录下来分析系统问题所在。Log4J。
对于网站来讲,不能把异常信息显示给用户,异常信息只能记录到日志,出了问题把日志文件发给开发人员,就能知道问题所在。

配置Log4Net环境

(1)新建一个WebApplication

(2)添加对log4net.dll的引用(bin\net\2.0\release 不能引用debug版本)(把相应的dll文件拷贝到项目中的lib文件夹下。)

(3)在Web.Config (或App.Config)添加配置,见备注

(4)初始化:在程序最开始加入log4net.Config.XmlConfigurator.Configure();不要加到页面的Load,而是global的application_start方法中

(5)在要打印日志的地方LogManager.GetLogger(typeof(Program)).Debug(“信息”); 。通过LogManager.GetLogger传递要记录的日志类类名获得这个类的ILog(这样在日志文件中就能看到这条日志是哪个类输出的了),然后调用Debug方法输出消息。因为一个类内部不止一个地方要打印日志,所以一般把ILog声明为一个static字段。
Private static ILog logger=LogManager.GetLogger(typeof(Test))
输出错误信息用ILog.Error方法,第二个参数可以传递Exception对象。log.Error("***错误"+ex),log.Error("***错误",ex)
测试代码:

Appender:可以将日志输出到不同的地方,不同的输出目标对应不同的Appender:RollingFileAppender(滚动文件)、AdoNetAppender(数据库)、SmtpAppender (邮件)等。

level(级别):标识这条日志信息的重要级别。None>Fatal>ERROR>WARN>DEBUG>INFO>ALL,设定一个Level,那么低于这个Level的日志是不会被写到Appender中的。

Log4Net还可以设定多个Appender,可以实现同时将日志记录到文件、数据、发送邮件等;可以设定不同的Appender的不同的Level,可以实现普通级别都记录到文件,Error以上级别发送邮件;可以实现对不同的类设定不同的Appender;还可以自定义Appender,这样可以自己实现将Error信息发短信等。

(*)除了Log4Net,还有Enterprise Library中的Logging Application Block、Apache的CommonLog 以及NLog等,都差不多。

Log4Net基本配置,项目中用上面的
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<log4net>
<!-- Define some output appenders -->
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="test.txt"/>
<appendToFile value="true"/>
<maxSizeRollBackups value="10"/>
<maximumFileSize value="1024KB"/>
<rollingStyle value="Size"/>
<staticLogFileName value="true"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline"/>
</layout>
</appender>
<root>
<level value="DEBUG"/>
<appender-ref ref="RollingLogFileAppender"/>
</root>
</log4net>
</configuration>

<log4net>
<!-- OFF, FATAL, ERROR, WARN, INFO, DEBUG, ALL -->
<!-- Set root logger level to ERROR and its appenders -->
<root>
<level value="ALL"/>
<appender-ref ref="SysAppender"/>
</root>

<!-- Print only messages of level DEBUG or above in the packages -->
<logger name="WebLogger">
<level value="DEBUG"/>
</logger>

<appender name="SysAppender" type="log4net.Appender.RollingFileAppender,log4net" >
<param name="File" value="App_Data/" />
<param name="AppendToFile" value="true" />
<param name="RollingStyle" value="Date" />
<param name="DatePattern" value="&quot;Logs_&quot;yyyyMMdd&quot;.txt&quot;" />
<param name="StaticLogFileName" value="false" />
<layout type="log4net.Layout.PatternLayout,log4net">
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
<param name="Header" value=" ----------------------header-------------------------- " />
<param name="Footer" value=" ----------------------footer-------------------------- " />
</layout>
</appender>
<appender name="consoleApp" type="log4net.Appender.ConsoleAppender,log4net">
<layout type="log4net.Layout.PatternLayout,log4net">
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
</layout>
</appender>
</log4net>

使用Log4Net完成异常日志处理的更多相关文章

  1. 在ASP.NET MVC中使用Log4Net记录异常日志,出错时导向到静态页

    本篇体验在ASP.NET MVC 4中使用Log4Net记录日志. 通过NuGet安装Log4Net. 需求是:当出错时导向到Error.html静态页面,Log4Net记录错误信息. 大致的思路是: ...

  2. ASP.NET全局错误处理和异常日志记录以及IIS配置自定义错误页面

    应用场景和使用目的 很多时候,我们在访问页面的时候,由于程序异常.系统崩溃会导致出现黄页.在通常的情况下,黄页对于我们来说,帮助是极大的,因为它可以帮助我们知道问题根源,甚至是哪一行代码出现了错误.但 ...

  3. Log4Net异常日志记录在asp.net mvc3.0的应用

    前言 log4net是.Net下一个非常优秀的开源日志记录组件.log4net记录日志的功能非常强大.它可以将日志分不同的等级,以不同的格式,输出到不同的媒介.本文主要是简单的介绍如何在Visual ...

  4. Log4Net异常日志记录在asp.net mvc3.0的应用(转载)

    这篇博客写的很好:http://www.cnblogs.com/qianlifeng/archive/2011/04/22/2024856.html 前言 log4net是.Net下一个非常优秀的开源 ...

  5. MVC4.0 利用HandleErrorAttribute和log4net实现记录异常日志功能

    1.MVC4.0中HandleErrorAttribte已经帮我们处理了异常问题,当我们新建一个非空的MVC项目时候,在FilterConfig中会发现这样的代码 public class Filte ...

  6. 转:使用log4net完成程序异常日志记录(使用SQLite数据库记录和普通文本记录)

    http://www.cnblogs.com/kyo-yo/archive/2010/06/11/use-log4net-to-log-exception.html 在前端时间开发的时候由于需要将异常 ...

  7. 用log4net快速构建asp.net 异常日志

    log4net是一个非常完善的日志组件. 有着强大的可配置性. 有助于提高开发效率 .log4net是apache组织开发的日志组件, 同其姐妹log4j一样, 是一个开源项目. 可以以插件的形式应用 ...

  8. ExceptionLess异常日志收集框架-1

    哈哈,中秋和代码更配哦,不知不觉一年过半了,祝园友们中秋快乐 前一阵子在博客园看到了一篇博文 http://www.cnblogs.com/savorboard/p/exceptionless.htm ...

  9. 也用 Log4Net 之将日志记录到数据库的后台实现 (二)

    也用 Log4Net 之将日志记录到数据库的后台实现 (二)  大家下午好,昨天讲了配置,今天我们讲讲后台实现,在完成了后台实现后,我们才能真正意义上的解决把自定义属性字段值录入到数据库中. 在开写之 ...

随机推荐

  1. Weka使用介绍

    (转) http://baidutech.blog.51cto.com/4114344/1033714/ 1.简介 数据挖掘.机器学习这些字眼,在一些人看来,是门槛很高的东西.诚然,如果做算法实现甚至 ...

  2. java eclipse中的代码联动提示功能

    eclipse中的代码联动提示设置:window--->preferences--->java--->editor----> content assist的auto activ ...

  3. iOS 最全面试题

    HTTP/1.0 在HTTP/1.0版本中,并没有官方的标准来规定Keep-Alive如何工作,因此实际上它是被附加到HTTP/1.0协议上,如果客户端浏览器支持Keep-Alive,那么就在HTTP ...

  4. Material Design - CollapsingToolbarLayout

    一.概述 CollapsingToolbarLayout是Material Design的一个Layout,直接继承于FrameLayout. 二.使用 1.导包 2.使用 - 设置相关属性 三.参考 ...

  5. JAVA生成二维码图片代码

    首先需要导入 QRCode.jar 包 下载地址看这里   http://pan.baidu.com/s/1o6qRFqM import java.awt.Color;import java.awt. ...

  6. CWnd与HWND的简单辨析

    今天在写一个小的网络应用,需要用到HWND类型的一个参数.而程序中有的“窗口操作句柄”只有一个CWnd类型的指针.这俩不都是“窗口句柄”么?而且反正都是地址直接转换使用如何?结果出现了调用失效的情况. ...

  7. Thinkphp框架感悟(一)

    一.assign() /** * 分析: * 此处是Controller类里面的assign方法,我们一般写的控制器所调用的assign方法就是调的这个. * 而这个方法就干了三件事:1.获取传过来的 ...

  8. Daily Scrum 10.30

    由于最近一段时间吴文会同学身体欠安,经过讨论我们对任务做了一下调整,暂时由罗洪运同学接手界面部分的开发.部分进度较快的同学的任务已经快要完成,工作重点也会转为整体开发和协助其他同学开发. 下面是今天的 ...

  9. SQL语句判断是否为今天或昨天

    方法一 select * from AAA where to_char(a,'yyyymmdd') = to_char(sysdate,'yyyymmdd'); select * from AAA w ...

  10. 关于Response.redirect()方法

    1. sendRedirect 后面要加上return.2. sendRedirect 执行过程是先转向还是先执行后续代码再转向?答: 先执行代码再转向,在一个sendRedirect后面不能再有其他 ...