码迷,mamicode.com
首页 > Web开发 > 详细

ASP.NET MVC中解决日志并发处理

时间:2015-11-22 13:56:52      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:

本章主要内容是将异常信息写到队列中,然后通过线程写到文本文件中,速度非常快,没有阻塞和延迟加载

1.首先在Model中建一个类MyExceptionAttribute.cs

public class MyExceptionAttribute : HandleErrorAttribute //继承
{
    public static Queue<Exception> exceptionQuese = new Queue<Exception>(); 
  //重写父类方法,一抛异常就会执行这个方法
public override void OnException(ExceptionContext filterContext) { base.OnException(filterContext); exceptionQuese.Enqueue(filterContext.Exception);//将异常依靠添加到队列中 filterContext.HttpContext.Response.Redirect("/Error.html");//出现异常后转到错误页 } }

2.打开Global.asax文件,找到RegisterGlobalFilters并转到定义,让里面的方法new自己定义的类

public class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        //filters.Add(new HandleErrorAttribute());
        filters.Add(new MyExceptionAttribute());
    }
}

3.在Global.asax文件下添加如下内容,当应用程序一打开时就执行一个线程,使用线程池,好处是为了避免线程频繁的创建,节省CPU耗用内存

public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

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

        string fileLogPath = Server.MapPath("/Log/");
        ThreadPool.QueueUserWorkItem((a) =>
        {
       //一直守着队列看是否有数据
while (true) { if (MyExceptionAttribute.exceptionQuese.Count > 0) { Exception ex = MyExceptionAttribute.exceptionQuese.Dequeue();//出队 string fileName = DateTime.Now.ToString("yyyy-MM-dd")+".txt"; File.AppendAllText(fileLogPath+fileName,ex.ToString(),Encoding.Default); } else { Thread.Sleep(3000);//如果队列中没有数据,休息一回,避免造成CPU空转 } } }, fileLogPath); } }

4.在当前项目下建一个文件夹Log,后续所有错误信息都往里面放

5.建一个控制器Test测试一下

public ActionResult Test()
{
    int a = 2;
    int b = 0;
    int c = a / b;
    return Content(c.ToString());
}

 

ASP.NET MVC中解决日志并发处理

标签:

原文地址:http://www.cnblogs.com/genesis/p/4985624.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!