zoukankan      html  css  js  c++  java
  • 用队列的方式实现日志

    下列的实例中:(怎么捕获异常,webform和asp.net MVC不太一样后者提供了一个全局的一场处理过滤器。MyExceptionAttribute是我们自己定义的过滤器,继承了HandleErrorAttrbute 。有异常就会执行OnException这个方法。)

    日志记录功能。
    一般日志是写在文件里
    多线程操作文件导致并发。
    队列就是内存当中的一个集合,先进先出
    Global中有一个方法叫Application_Error(),只要发生异常,就会执行这个方法。Application_Start()是在程序一开始就会运行

    .netFramework提供队列的集合。
    public static Queue<Exception> e=new Queue<Exception>

    步骤:当第一次请求应用程序的时候,运行Application_start();的时候注册一个自己定义的异常过滤器。

    Application_start(){ //程序一运行的时候

    FilerConfig.RegisterGlobalFilters(GlobalFilters.Filters) //注册了我们自己定义的一个异常过滤器
    }


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

    自己定义的异常过滤器

    public class MyExceptionAttribute:HandleErrorAttrbute
    {
      public static Queue<Exception> ExceptionQueue=new Queue<Exception> //声明一个队列
      public override void OnException(ExceptionContext filterconter) //抛异常就会执行这个方法
      {
        base.onException(filterconter);
        ExceptionQueue(filetercontext.Exception) //将异常信息添加到队列中。
        filterContext.HttpContext.Response.Redirect("/Error.html");
      }


    }

    下面就是用线程池从队列中拿数据往文件里面写
    protected void Application_Start()

     {

      string fileLogPath=Server.MapPath("/Log/");
      ThreadPool.QueueUserworkItem((a)=> //拉姆达表达式
      {

        while(true)
        {
        if(MyExceptionAttribute.ExceptionQueue.Count>0)
          {
            Exception ex=MyExceptionAttribute.ExceptionQueue.Dequeue()//出队,先进先出
            string fileName=DataTime.Now.Tostring("yyyy-mm-dd")+".txt";
            File.AppendAllText(fileLogPath+fileName,ex.ToString(),System.Text.Encoding.Default)
          }
        else{ Thread.Sleep(3000);如果队列中没有数据,休息 }
         }

      },fileLogPath);

       }

    总之:就是把错误写入队列,然后开一个线程池,无线循环的读取队列中的值,如果有的话就写入文本,没有的话就睡觉。

  • 相关阅读:
    Ubuntu安装搜狗输入法
    Ubuntu 命令
    ubuntu忽然不能登录,输入密码正确一直返回登录界面
    chmod用法
    Maven学习(六)maven使用中遇到的坑
    win10下装mysql-5.7.18-winx64
    Maven学习(五)使用Maven构建多模块项目
    Maven学习(四)eclipse创建maven项目
    Maven学习(三)maven原理概念详述
    Struts2+Hibernate4+Spring4框架整合搭建Java项目原型
  • 原文地址:https://www.cnblogs.com/liuwenxu/p/6413834.html
Copyright © 2011-2022 走看看