Esempio n. 1
0
 /// <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);
 }
Esempio n. 2
0
        /// <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);
            }
        }
Esempio n. 3
0
 /// <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));
 }