/// <summary> /// 向日志文件中写入运行时信息 /// </summary> /// <param name="message">要写入的运行时消息</param> /// <param name="messageType"></param> /// <returns></returns> private bool WriteRunTimeMessage(IGetWriteLogInfo logInfo) { lock (m_Lock) { m_MessageQueue.Enqueue(logInfo); } return(true); }
/// <summary> /// 异步写文件线程入口函数 /// </summary> private void WriteTreadHandler() { Queue <IGetWriteLogInfo> tempQueue = new Queue <IGetWriteLogInfo>(); while (true) { StreamWriter sw = null; #region 加锁拷贝部分 lock (m_MessageQueue) { int nowMessageCount = m_MessageQueue.Count; for (int i = 0; i < nowMessageCount; i++) { try { tempQueue.Enqueue(m_MessageQueue.Dequeue()); } catch (System.InvalidOperationException exp) { break; } } } #endregion try { int nowTempQueueCount = tempQueue.Count; for (int i = 0; i < nowTempQueueCount; i++) { IGetWriteLogInfo messageInfo = tempQueue.Dequeue(); long fileSize = 0; DateTime dtNow = DateTime.Now; //日志文件名称 string FileName = messageInfo.BaseFileName + "-" + dtNow.ToShortDateString() + ".log"; //日志文件的完整路径 string FilePath = System.IO.Path.Combine(messageInfo.DictionaryPath, FileName); FilePath = FilePath.Replace("/", "-"); //判断日志文件的大小 if (File.Exists(FilePath)) { FileInfo FileInfo = new FileInfo(FilePath); fileSize = FileInfo.Length / 1024 / 1024; //当天异常日志大于10M的时候停止继续写入异常信息(PS:万一异常超级多 硬盘岂不是要炸~_~ 服务器上全天跑着鬼知道那儿有bug) if (fileSize > 10) { continue; } } sw = new StreamWriter(FilePath, true, Encoding.UTF8, 1024); sw.AutoFlush = true; sw.WriteLine(messageInfo.Message); sw.Close(); //sw.WriteLine("------------------------------------------------------------"); } } catch (Exception exp) { throw exp; } finally { if (sw != null) { sw.Close(); sw.Dispose(); } } Thread.Sleep(1000); } }
/// <summary> /// 向日志文件中写入运行时的程序信息 /// </summary> /// <param name="Message">要写入到日志文件中的信息</param> /// <param name="messageType">要写入的日志类型</param> /// <param name="isAutoAddTimeInfo">是否在写入的信息前加上当前系统时间</param> /// <returns></returns> public bool WriteRunTimeMessage(IGetWriteLogInfo logInfo, bool isAutoAddTimeInfo) { logInfo.Message = DateTime.Now.ToString() + "->" + logInfo.Message; return(WriteRunTimeMessage(logInfo)); }