/// <summary>Запись сообщения.</summary> /// <param name="x_sSource">имя источника сообщения.</param>> /// <param name="x_ulType">тип сообщения.</param>> /// <param name="x_ulForm">вид сообщения.</param>> /// <param name="x_sCategory">категория сообщения.</param>> /// <param name="x_sDescription">текст сообщения.</param>> /// <returns>True, если при записи сообщения не возникли ошибки.</returns>> protected override bool WritingMessage( string x_sSource, MessageTypeEnum x_ulType, MessageFormEnum x_ulForm, string x_sCategory, string x_sDescription) { bool c_bSucceeded = true; // Текущие дата и время. DateTime c_dtCurrentTime = DateTime.Now; // Формирование строки с именем папки журнала сообщений. string c_sFolderName = String.Format( n_sTemplate_MessageFolder, m_sFolderName, c_dtCurrentTime.Year, c_dtCurrentTime.Month, CFormat.GetMonth(c_dtCurrentTime.Month), c_dtCurrentTime.Day); // Формирование строки с расширением файла журнала сообщений. string c_sFileExtension = ""; switch (x_ulType) { case MessageTypeEnum.ERROR_MESSAGE: c_sFileExtension = "err"; break; case MessageTypeEnum.WARNING_MESSAGE: c_sFileExtension = "wrn"; break; case MessageTypeEnum.INFORMATION_MESSAGE: c_sFileExtension = "inf"; break; } // Формирование строки с именем файла журнала сообщений. string c_sFileName = String.Format( n_sTemplate_MessageFile, c_sFolderName, x_sSource, c_sFileExtension); try { // Создание папки, если она не существует. if (!Directory.Exists(c_sFolderName)) { Directory.CreateDirectory(c_sFolderName); } using (StreamWriter c_swTextJournal = new StreamWriter(new FileStream(c_sFileName, FileMode.Append, FileAccess.Write, FileShare.Read))) { // Формирование строки сообщения. string c_sBuffer = ""; if (x_ulForm == MessageFormEnum.RELEASE_MESSAGE) { c_sBuffer = String.Format( n_sTemplate_ReleaseLine, c_dtCurrentTime.Hour, c_dtCurrentTime.Minute, c_dtCurrentTime.Second, c_dtCurrentTime.Millisecond, x_sCategory, x_sDescription); } else { c_sBuffer = String.Format( n_sTemplate_DebugLine, c_dtCurrentTime.Hour, c_dtCurrentTime.Minute, c_dtCurrentTime.Second, c_dtCurrentTime.Millisecond, x_sCategory, x_sDescription, Thread.CurrentThread.ManagedThreadId, CFormat.GetCaller(new StackFrame(2, true))); } // Запись в файл сообщения. c_swTextJournal.Write(c_sBuffer); } } catch { c_bSucceeded = false; } return(c_bSucceeded); }
/// <summary>Запись сообщения.</summary> /// <param name="x_sSource">имя источника сообщения.</param>> /// <param name="x_ulType">тип сообщения.</param>> /// <param name="x_ulForm">вид сообщения.</param>> /// <param name="x_sCategory">категория сообщения.</param>> /// <param name="x_sDescription">текст сообщения.</param>> /// <returns>True, если при записи сообщения не возникли ошибки.</returns>> protected override bool WritingMessage( string x_sSource, MessageTypeEnum x_ulType, MessageFormEnum x_ulForm, string x_sCategory, string x_sDescription) { bool c_bSucceeded = true; // Преобразование типа сообщения. string c_sType = "Unknown"; switch (x_ulType) { case MessageTypeEnum.ERROR_MESSAGE: c_sType = "Error"; break; case MessageTypeEnum.WARNING_MESSAGE: c_sType = "Warning"; break; case MessageTypeEnum.INFORMATION_MESSAGE: c_sType = "Information"; break; } try { // Создание файла базы данных, если он не существует. if (!File.Exists(m_sFileName)) { (new SqlCeEngine(String.Format("Data Source='{0}'", m_sFileName))).CreateDatabase(); // Создание таблицы для сообщений. using (SqlCeConnection c_cnSqlceJournal = new SqlCeConnection(String.Format("Data Source='{0}'", m_sFileName))) { c_cnSqlceJournal.Open(); // Формирование и выполнение запроса на создание таблицы. SqlCeCommand c_cmCreate = new SqlCeCommand( String.Format(n_sTemplate_CreateTable, m_sTableName), c_cnSqlceJournal); c_cmCreate.ExecuteNonQuery(); } } using (SqlCeConnection c_cnSqlceJournal = new SqlCeConnection(String.Format("Data Source='{0}'", m_sFileName))){ c_cnSqlceJournal.Open(); // Формирование строки запроса. string c_sBuffer = ""; if (x_ulForm == MessageFormEnum.RELEASE_MESSAGE) { c_sBuffer = String.Format(n_sTemplate_InsertMessage, m_sTableName, x_sSource, c_sType, x_sCategory, x_sDescription.Replace("'", "''"), Environment.UserName, Environment.MachineName); } else { c_sBuffer = String.Format(n_sTemplate_InsertDebug, m_sTableName, x_sSource, c_sType, x_sCategory, x_sDescription.Replace("'", "''"), Environment.UserName, Environment.MachineName, Thread.CurrentThread.ManagedThreadId, CFormat.GetCaller(new StackFrame(2, true))); } // Формирование и выполнение запроса на добавление сообщения. SqlCeCommand c_cmInsert = new SqlCeCommand(c_sBuffer, c_cnSqlceJournal); if (c_cmInsert.ExecuteNonQuery() == 0) { c_bSucceeded = false; } } } catch { c_bSucceeded = false; } return(c_bSucceeded); }
/// <summary>Запись сообщения.</summary> /// <param name="x_sSource">имя источника сообщения.</param>> /// <param name="x_ulType">тип сообщения.</param>> /// <param name="x_ulForm">вид сообщения.</param>> /// <param name="x_sCategory">категория сообщения.</param>> /// <param name="x_sDescription">текст сообщения.</param>> /// <returns>True, если при записи сообщения не возникли ошибки.</returns> protected override bool WritingMessage( string x_sSource, MessageTypeEnum x_ulType, MessageFormEnum x_ulForm, string x_sCategory, string x_sDescription) { bool c_bSucceeded = true; // Текущие дата и время. DateTime c_dtCurrentTime = DateTime.Now; // Преобразование типа сообщения. string c_sType = "Unknown"; switch (x_ulType) { case MessageTypeEnum.ERROR_MESSAGE: c_sType = "Error"; break; case MessageTypeEnum.WARNING_MESSAGE: c_sType = "Warning"; break; case MessageTypeEnum.INFORMATION_MESSAGE: c_sType = "Information"; break; } XmlDocument c_xdXmlJournal = new XmlDocument(); try { // Создание файла, если он не существует. if (!File.Exists(m_sFileName)) { c_xdXmlJournal.LoadXml(n_sTemplate_EmptyJournal); c_xdXmlJournal.Save(m_sFileName); } // Открытие файла. c_xdXmlJournal.Load(m_sFileName); // Добавление нового сообщения в XML документ. if (x_ulForm == MessageFormEnum.RELEASE_MESSAGE) { CXml.AddElement( c_xdXmlJournal.SelectSingleNode(n_sTemplate_JournalNode), "message", ElementTypeEnum.ATTRIBUTE_ELEMENT, "date", String.Format("{0:d2}.{1:d2}.{2:d4}", c_dtCurrentTime.Day, c_dtCurrentTime.Month, c_dtCurrentTime.Year), "time", String.Format("{0:d2}:{1:d2}:{2:d2}.{3:d3}", c_dtCurrentTime.Hour, c_dtCurrentTime.Minute, c_dtCurrentTime.Second, c_dtCurrentTime.Millisecond), "source", x_sSource, "type", c_sType, "category", x_sCategory, "description", x_sDescription, "user", Environment.UserName, "computer", Environment.MachineName); } else { CXml.AddElement( c_xdXmlJournal.SelectSingleNode(n_sTemplate_JournalNode), "message", ElementTypeEnum.ATTRIBUTE_ELEMENT, "date", String.Format("{0:d2}.{1:d2}.{2:d4}", c_dtCurrentTime.Day, c_dtCurrentTime.Month, c_dtCurrentTime.Year), "time", String.Format("{0:d2}:{1:d2}:{2:d2}.{3:d3}", c_dtCurrentTime.Hour, c_dtCurrentTime.Minute, c_dtCurrentTime.Second, c_dtCurrentTime.Millisecond), "source", x_sSource, "type", c_sType, "category", x_sCategory, "description", x_sDescription, "user", Environment.UserName, "computer", Environment.MachineName, "thread", Thread.CurrentThread.ManagedThreadId.ToString(), "writer", CFormat.GetCaller(new StackFrame(2, true))); } // Сохранение файла. c_xdXmlJournal.Save(m_sFileName); } catch { c_bSucceeded = false; } return(c_bSucceeded); }