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); } }