• .Net 之自定义Log


    话不多说,以下是简单的一个logHelper类和一个小demo

    1.LogDto:主要封装一些记录日志用到的东西,比如日志信息和日志类型等等

    public class LogDto
    {
      public string message { get; set; }
       public LogType LogType { get; set; }
    }

    2.LogHelper:日志帮助类

    1)定义一个队列,当调用WriteLog方法时就把要记录的实体入队

    2)定义一个委托,写日志的话可能会有多种形式,可以是写在文本也可以是写在数据库等.那么又可以定义方法WriteToTxt,WriteToDataBase等;

    3)静态构造函数.开启一个线程监测队列里面是否有数据,这里就相当于观察者模式.当有数据的时候,观察者就需要做出对应的动作(WriteToTxt,WriteToDataBase)这里为了方便写在一个类里面,偷个懒吧。所以就又得先让他们和委托关联起来,当有数据的时候,让日志对象出列并调用委托就OK了

        public class LogHelper
          {
    
           public static Queue<LogDto> queueList = new Queue<LogDto>()
                private static Action<LogDto> QueueAction;
                public static void WriteLog(LogDto logDto)
                {
                      lock (queueList)
                      {
                            queueList.Enqueue(logDto);
                      }
                }
    
                static LogHelper()
                {
                      QueueAction = WriteToTxt;
                      QueueAction += WriteToDataBase;
                     //开启线程
                      Task.Run(() =>
                      {
                            while (true)
                            {
                                  if (queueList.Any())
                                  {
                                     var logdto = queueList.Dequeue();
                                     QueueAction.Invoke(logdto);
                                }
                                  else
                                        Thread.Sleep(500);
                            }
                      });
                }
    
                private static void WriteToTxt(LogDto logDto)
                {
                   var path = Path.Combine(Directory.GetCurrentDirectory(), "log.txt");
                   StreamWriter sw = new StreamWriter(path, true, Encoding.UTF8);
                   sw.WriteLine($"------------------------ Log Begin-------------------------------------------------------------------");
                   sw.WriteLine($" 1) Happened Time:{DateTime.Now}");
                   sw.WriteLine($" 2) Log Type:{logDto.LogType}");
                   sw.WriteLine($" 3) Context:{logDto.message}");
                   sw.WriteLine($"----------------------------------------------Log End-------------------------------------------------");
                   sw.WriteLine();
                   sw.Close();
              }
                private static void WriteToDataBase(LogDto logDto)
                {
                      //..
                }
          }

    3.Demo:一个简单的WinForm,模拟写日志的场景,这里就不贴代码了

    4.执行结果

     

  • 相关阅读:
    Napa简介——基于Web用于Outlook/SharePoint的IDE
    Azul开源Zing Jvm
    如何控制单元测试的粒度?
    存储过程与Entity Framework
    Java增强的for循环和普通for循环对比
    Java中的static变量、方法、代码块初始化执行顺序
    推荐一款好用的博客软件——菊子曰
    Android进程与线程
    OPhone SDK
    开始学习Android
  • 原文地址:https://www.cnblogs.com/berlinman/p/12079547.html
Copyright © 2020-2023  润新知