在MVC三层项目中如何使用Log4Net

--前期准备(添加到队列中)

0-1在新建后的MVC项目中的【Models】中添加一个类,用于处理异常信息,并继承自HandleErrorAttribute

  public class MyExceptionAttribute: HandleErrorAttribute
    {


        //创建队列集合
        public static Queue ExceptionQueue = new Queue();


        /// 
        /// 可以捕获异常数据
        /// 
        /// 
        public override void OnException(ExceptionContext filterContext)
        {
            base.OnException(filterContext);
            Exception ex = filterContext.Exception;
            //写到队列
            //插入到队列里面
            ExceptionQueue.Enqueue(ex);
            //跳转到错误页面
            filterContext.HttpContext.Response.Redirect("/Error.html");
        }

    }

 

 

0-2在FilterConfig文件中注册自己定义的异常处理过滤器

 在MVC三层项目中如何使用Log4Net_第1张图片

 

 

 在MVC三层项目中如何使用Log4Net_第2张图片

 

 

 

 

1.添加bll文件

 

 

2.在Web.Config中配置Log4Net

 在MVC三层项目中如何使用Log4Net_第3张图片

 

 

 在MVC三层项目中如何使用Log4Net_第4张图片

 

 

 

    
    "spring">
      
"context" type="Spring.Context.Support.MvcContextHandler, Spring.Web.Mvc4" />
"log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> "file://~/Config/controllers.xml" /> "file://~/Config/services.xml" />

  
  
  
  
    
    
    
      "ERROR" />
      ref ref="SysAppender" />
    

    
    "WebLogger">
      "ERROR" />
    
    "SysAppender" type="log4net.Appender.RollingFileAppender,log4net">
      "File" value="App_Data/Log/" />
      "AppendToFile" value="true" />
      "RollingStyle" value="Date" />
      "DatePattern" value="yyyy\\yyyy-MM\\yyyy-MM-dd'.txt'" />
      "StaticLogFileName" value="false" />
      "log4net.Layout.PatternLayout,log4net">
        "ConversionPattern" value="%newline %n记录时间:%date %n线程ID:[%thread] %n日志级别:  %-5level %n出错类:%logger property: [%property{NDC}] - %n错误描述:%message%newline %n" />
      
    
    "consoleApp" type="log4net.Appender.ConsoleAppender,log4net">
      "log4net.Layout.PatternLayout,log4net">
        "ConversionPattern" value="%newline %n记录时间:%date %n线程ID:[%thread] %n日志级别:  %-5level %n出错类:%logger property: [%property{NDC}] - %n错误描述:%message%newline %n" />
      
    
  
  

 

 

3.在Global.asax文件中的Application_Start方法中初始化log4net,不要加到页面的Load。

 在MVC三层项目中如何使用Log4Net_第5张图片

 

 

 

4.在Application_Start写以下代码,用来添加到队列

//【开启一个线程,扫描异常信息队列】
            //拿到文件夹的物理路径
            string filePath = Server.MapPath("/Log/");
            //开启线程,使用线程池
            ThreadPool.QueueUserWorkItem((a) =>
            {
                //线程一直在执行
                while (true)
                {
                    //判断队列中有数据,Count>0表示有数据
                    if (MyExceptionAttribute.ExceptionQueue.Count > 0)
                    {
                        //取出数据
                        Exception ex = MyExceptionAttribute.ExceptionQueue.Dequeue();
                        //判断是否真正拿到数据
                        if (ex != null)
                        {
                            //【将异常信息写到日志文件中】
                            //根据年月日 来命名日志文件
                            //string fileName = DateTime.Now.ToString("yyyy-MM-dd");
                            //File.AppendAllText(filePath + fileName + ".txt", ex.ToString(),System.Text.Encoding.UTF8);


                            //【使用log4net】
                            ILog logger = LogManager.GetLogger("errorMsg");
                            //将异常信息写入到log4net中
                            logger.Error(ex.ToString()); 
                            
                        }
                        else
                        {
                            //如果队列中没有数据,让线程休息3秒钟
                            Thread.Sleep(3000);
                        }

                    }
                    else
                    {
                        //如果队列中没有数据,让线程休息3秒钟
                        Thread.Sleep(3000);
                    }
                }
            }, filePath);
        }

 

你可能感兴趣的:(在MVC三层项目中如何使用Log4Net)