public class LogCommon
{
public static Queue<string> LogQueue = new Queue<string>(); //实例化一个队列
static LogCommon() //日志写入文件的方法在类的静态构造函数中实现,这样,在队列被调用的时候,会自动调用此方法
{
//开启线程池来写日志
ThreadPool.QueueUserWorkItem(a =>
{
while (true)
{
string ex = string.Empty;
lock ("Itcast-DotNet-AspNet-Glable-LogLock")
{
if (LogQueue.Count > 0) //如果队列中有数据,将其出队列
{
ex = LogQueue.Dequeue();
}
else
{
Thread.Sleep(30); //如果没有数据,让线程睡30毫秒,之后进入下一轮循环
continue;
}
}
//需要串行执行的代码
}
});
}
public static void WriteLog(string str) //将日志写入到队列中的方法
{
lock ("Itcast-DotNet-AspNet-Glable-LogLock")
{
LogQueue.Enqueue(str);
}
}