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);

       }

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

  • 相关阅读:
    深入分析 Python 的垃圾回收机制
    9.26
    Web安全之ML--构建机器学习工具箱
    第八节--图的数据结构及其算法
    第七节--树形结构及其算法
    第六节--堆栈与队列算法
    第四节--查找与哈希算法
    第三节--排序算法
    第二节--常用数据结构
    第一节--走入算法的世界
  • 原文地址:https://www.cnblogs.com/liuwenxu/p/6413834.html
Copyright © 2011-2022 走看看