首页 > 代码库 > 一种多线程写日志文件的解决方案 c#源代码演示
一种多线程写日志文件的解决方案 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("\r\n");
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();
}
}
}
一种多线程写日志文件的解决方案 c#源代码演示