一种多线程写日志文件的解决方案 c#源代码演示

using System;
using System.Collections.Generic;
using System.Collections;
using System.Text;
using System.IO;
using System.Timers;

namespace ComUtil
{
    public class LogWriter
    {
        private LogWriter()
        {
            logtimer.Stop();
            logtimer.Elapsed += new ElapsedEventHandler(logtimer_Elapsed);
        }

         private  void logtimer_Elapsed(object sender, ElapsedEventArgs e)
        {
            string rootpath = System.AppDomain.CurrentDomain.BaseDirectory;

            if (!Directory.Exists(rootpath + "\logs"))
            {
                Directory.CreateDirectory(rootpath + "\logs");
            }


           
            while(LogList.Count>0)
            {
                StreamWriter Writer = new StreamWriter(rootpath + "\logs\" + LogList[0]["logfilename"].ToString(), true);
                StringBuilder wb = new StringBuilder();

                wb.Append("[");
                wb.Append(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
                wb.Append("]");
                wb.Append("[");
                wb.Append(LogList[0]["logtype"].ToString());
                wb.Append("]");
                wb.Append(LogList[0]["msg"].ToString());
                wb.Append(" ");
                Writer.Write(wb.ToString());
                wb = wb.Remove(0, wb.Length);
                Writer.Flush();
                Writer.Close();

                LogList.RemoveAt(0);
            }

            logtimer.Stop();  //关闭定时器

        }

        private List<Hashtable> LogList = new List<Hashtable>();
        private static LogWriter mInstance = null;

        private Timer logtimer = new Timer(1000);

        public static LogWriter GetInstance()
        {
            if (mInstance==null)
            {
                mInstance = new LogWriter();
            }
            return mInstance;
        }

      
        public void WriteMessage(string msg,string logtype,string logfilename)
        {

            Hashtable newlog = new Hashtable();
            newlog.Add("msg", msg);
            newlog.Add("logtype", logtype);
            newlog.Add("logfilename", logfilename);
            LogList.Add(newlog);
            logtimer.Start();
        }


    }
}

原文地址:https://www.cnblogs.com/cxd4321/p/3934290.html