asp.net mvc中捕获异常和使用log4net日志记录组件 zkh

一.  异常处理器的使用

1.在asp.net mvc中的FilterConfig中定义了全局的异常处理

2.上图的异常处理器,可以在web.config文件中激活

3.当然我们也可以自定义一个异常处理器,让它继承HandleErrorAttribute,去重写OnException方法

4.异常处理器定义好了,接下来就要将定义的异常处理器注册给filter

这样就大功告成了

二  log4net日志记录组件的使用

1.首先 还是引入dll文件

2.书写配置文件

先在<configuration>下<configSections>中配置log4net节点

1 <configSections>
2 <!--配置log4net节点-->
3     <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
4 </configSections>
View Code

书写具体配置

 1 <log4net>
 2     <!-- OFF, FATAL, ERROR, WARN, INFO, DEBUG, ALL -->
 3     <!-- Set root logger level to ERROR and its appenders -->
 4     <root>
 5       <level value="ALL" />
 6       <appender-ref ref="SysAppender" />
 7     </root>
 8     <!-- Print only messages of level DEBUG or above in the packages -->
 9     <logger name="WebLogger">
10       <level value="DEBUG" />
11     </logger>
12     <appender name="SysAppender" type="log4net.Appender.RollingFileAppender,log4net">  <!--输出到文件-->
13       <param name="File" value="App_Data/" />
14       <param name="AppendToFile" value="true" />
15       <param name="RollingStyle" value="Date" />
16       <param name="DatePattern" value="&quot;Logs_&quot;yyyyMMdd&quot;.txt&quot;" />
17       <param name="StaticLogFileName" value="false" />
18       <layout type="log4net.Layout.PatternLayout,log4net">
19         <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
20         <param name="Header" value="&#xD;&#xA;----------------------header--------------------------&#xD;&#xA;" />
21         <param name="Footer" value="&#xD;&#xA;----------------------footer--------------------------&#xD;&#xA;" />
22       </layout>
23     </appender>
24     <appender name="consoleApp" type="log4net.Appender.ConsoleAppender,log4net"> <!--输出到控制台-->
25       <layout type="log4net.Layout.PatternLayout,log4net">
26         <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
27       </layout>
28     </appender>
29   </log4net>
View Code

这段代码也是找的别人的,应该够全了吧

3.配置文件写好了,那就该将捕捉到的异常信息记录下来了

  protected void Application_Start()
        {
            log4net.Config.XmlConfigurator.Configure();  //读取log4net文件

            AreaRegistration.RegisterAllAreas();

            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);

            //开启一个线程 
            //读取异常队列 
            //异常队列中有异常 使用log4net记录下来
            //异常队列中没有异常 线程睡一会儿
            ThreadPool.QueueUserWorkItem((state)=> {
                //拿到线程后 读取异常队列
                while (true) {
                    if (MyExceptionFilter.exQueue.Count>0) {
                        Exception ex = MyExceptionFilter.exQueue.Dequeue();
                        if (ex != null)
                        {
                            ILog logger = LogManager.GetLogger("errorMsg");
                            logger.Error(ex.ToString());
                        }
                        else
                        {
                            Thread.Sleep(3000);
                        }
                    }  
                    else {
                        Thread.Sleep(3000);
                    }
                }
            });
        }
View Code

以上代码中 

log4net.Config.XmlConfigurator.Configure();                       //读取log4net文件

ILog logger = LogManager.GetLogger("errorMsg");            //errorMsg是日志的名字

logger.Error(ex.ToString());                                                  //将获取到的异常记录下来

 搞定...

菜鸟第一次写博客,字体这些也不知道多大合适,刚开始截图的代码就凑合看吧...

原文地址:https://www.cnblogs.com/zkhbalance/p/9066591.html