您的位置:首页 > 编程语言 > C#

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

2014-08-25 09:40 162 查看
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();
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐