一种多线程写日志文件的解决方案 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();
}
}
}
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# 自动查找文件内容(正则使用、获取目录下所有文件、多线程、日志记录,文件操作)
- C# 多线程写日志文件,锁定日志文件
- 使文件下载的自定义连接支持 FlashGet 的断点续传多线程链接下载! C#/ASP.Net 实现
- 一个Web文件上传的C#源代码
- 解决方案看起来是受源代码管理...保存解决方案的源代码管理设置的MSSCCPRJ.SCC文件或其他项可能己被删除
- 基于Java Web的文件上传进度显示的一种解决方案
- c#大文件读取和写入数据库(带进度条的源代码)
- 使文件下载的自定义连接支持 FlashGet 的断点续传多线程链接下载! C#/ASP.Net 实现!
- 多线程 C#解决方案小结
- [C#]如何将类放置于不同的文件中在同一个解决方案中调用?(不同解决方案的需要使用类库ClassLibrary)
- [C#]如何将类放置于不同的文件中在同一个解决方案中调用?(不同解决方案的需要使用类库ClassLibrary)
- 基于Java Web的文件上传进度显示的一种解决方案(转)
- 一个Web文件上传的C#源代码
- 把 Visual Studio .NET 源代码文件中C# XML注释提取成工程文档
- c#大文件读取和写入数据库(带进度条的源代码)
- 解决方案看起来是受源代码管理,但无法找到它的帮定信息.保存解决方案的源代码管理设置的MSSCCPRJ.SCC文件或其他项可能己被删除.由于无法自动恢复这些缺少的信息,缺少帮定的项目将被视为不受源代码管理.
- 基于Java Web的文件上传进度显示的一种解决方案
- 把 Visual Studio .NET 源代码文件中C# XML注释提取成工程文档
- 使文件下载的自定义连接支持 FlashGet 的断点续传多线程链接下载! C#/ASP.Net 实现! 转
- WinSock实现多线程网络文件传输程序(二)(MFC+WinSock 附源代码)