项目中经常需要使用到对软件发生错误的日志记录,关于此,很多公司及组织已经做了很多工作,比如可以使用Microsoft提供的Microsoft Enterprise Library January 2006(最新版为2007APril,但是个人现在习惯于使用2006版,版 本为2.0)中的日志记录模块或是开源项目NLOG等,这些东东一般来说功能都比较强大,但是上手可能并不是那么容易,其实一般来说我们主要需要记录的信息无非是发生错误的时间及出错原因及其他一些方便我们查找程序错误所需要的内容,我们可以让它记录到一个文本文件中,这样即时软件发布到客户手中使用时,如果在使用过程中发生什么错误,我们可以要求客户提供此错误日志供我们查错使用,下面说说我在项目中使用的错误日志记录功能的一些实现方法,

1.先定义一个记录错误日志的类,类内容如下

错误日志记录类_日志记录using System.IO;

错误日志记录类_日志记录

错误日志记录类_日志记录namespace CSST.WMS.UI.Utility

错误日志记录类_日志记录_04错误日志记录类_错误日志_05错误日志记录类_日志记录_06{

错误日志记录类_构造函数_07错误日志记录类_日志记录_08    /**//// <summary>

错误日志记录类_文件路径_09    /// 文本日志记录类,成员函数均为静态函数,直接调用即可

错误日志记录类_错误日志_10    /// </summary>

错误日志记录类_文件路径_09    public class LogMsg

错误日志记录类_构造函数_07错误日志记录类_日志记录_08    错误日志记录类_日志记录_06{

错误日志记录类_日志记录_08错误日志记录类_构造函数_07        常量定义#region 常量定义

错误日志记录类_构造函数_07错误日志记录类_日志记录_08        /**//// <summary>

错误日志记录类_文件路径_09        /// 程序目录名

错误日志记录类_文件路径_09        /// (一般根据需要修改此变量值即可)

错误日志记录类_错误日志_10        /// </summary>

错误日志记录类_文件路径_09        private const string FolderName = "EventLog";

错误日志记录类_文件路径_09

错误日志记录类_构造函数_07错误日志记录类_日志记录_08        /**//// <summary>

错误日志记录类_文件路径_09        /// 日志文件名

错误日志记录类_文件路径_09        /// (全名或后缀名,按日分类时为后缀名)

错误日志记录类_错误日志_10        /// </summary>

错误日志记录类_文件路径_09        private const string logFileName = "Log.Log";

错误日志记录类_错误日志_10        #endregion

错误日志记录类_文件路径_09

错误日志记录类_日志记录_08错误日志记录类_构造函数_07        构造函数#region 构造函数

错误日志记录类_构造函数_07错误日志记录类_日志记录_08        /**//// <summary>

错误日志记录类_文件路径_09        /// 私有构造函数,不允许直接实例化

错误日志记录类_错误日志_10        /// </summary>

错误日志记录类_文件路径_09        private LogMsg()

错误日志记录类_构造函数_07错误日志记录类_日志记录_08        错误日志记录类_日志记录_06{

错误日志记录类_文件路径_09            //

错误日志记录类_错误日志_10        }

错误日志记录类_错误日志_10        #endregion

错误日志记录类_文件路径_09

错误日志记录类_日志记录_08错误日志记录类_构造函数_07        记录错误日志到文本文件到我的文档目录#region 记录错误日志到文本文件到我的文档目录

错误日志记录类_文件路径_09

错误日志记录类_构造函数_07错误日志记录类_日志记录_08        /**//// <summary>

错误日志记录类_文件路径_09        /// 记录错误日志到文本文件到我的文档目录

错误日志记录类_文件路径_09        /// 按月分,每月产生一个日志文件

错误日志记录类_文件路径_09        /// </summary>

错误日志记录类_错误日志_10        /// <param name="text">日志内容</param>

错误日志记录类_文件路径_09        static public void WriteLogToApplicationFolderByMonth(string text)

错误日志记录类_构造函数_07错误日志记录类_日志记录_08        错误日志记录类_日志记录_06{

错误日志记录类_文件路径_09            //string folderPath = System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\My Tests\\Log1";

错误日志记录类_文件路径_09

错误日志记录类_文件路径_09

错误日志记录类_文件路径_09            //格式化文件夹字符串

错误日志记录类_文件路径_09            string folderPath = string.Format("{0}\\{1}\\Year_{2}", System.Windows.Forms.Application.StartupPath, FolderName, System.DateTime.Now.ToString("yyyy"));

错误日志记录类_文件路径_09

错误日志记录类_文件路径_09            if (!Directory.Exists(folderPath))

错误日志记录类_构造函数_07错误日志记录类_日志记录_08            错误日志记录类_日志记录_06{

错误日志记录类_文件路径_09                Directory.CreateDirectory(folderPath);

错误日志记录类_错误日志_10            }

错误日志记录类_文件路径_09

错误日志记录类_文件路径_09            //格式化文件路径字符串

错误日志记录类_文件路径_09            string filePath = string.Format("{0}\\Month_{1}_{2}", folderPath, System.DateTime.Today.ToString("MM"), logFileName);

错误日志记录类_文件路径_09

错误日志记录类_文件路径_09            LogToFile(filePath, text);

错误日志记录类_错误日志_10        }

错误日志记录类_文件路径_09

错误日志记录类_错误日志_10        #endregion

错误日志记录类_文件路径_09

错误日志记录类_日志记录_08错误日志记录类_构造函数_07        记录文本到文本文件#region 记录文本到文本文件

错误日志记录类_构造函数_07错误日志记录类_日志记录_08        /**//// <summary>

错误日志记录类_文件路径_09        /// 记录文本到文本文件(根据微软MSDN2005帮助文档System.IO.File.AppendText()提供的示例修改)

错误日志记录类_文件路径_09        /// </summary>

错误日志记录类_文件路径_09        /// <param name="filePath">文件路径</param>

错误日志记录类_错误日志_10        /// <param name="text">记录内容</param>

错误日志记录类_文件路径_09        static private void LogToFile(string filePath, string text)

错误日志记录类_构造函数_07错误日志记录类_日志记录_08        错误日志记录类_日志记录_06{

错误日志记录类_文件路径_09            //-------------------

错误日志记录类_文件路径_09            StreamWriter sw = null;

错误日志记录类_文件路径_09            try

错误日志记录类_构造函数_07错误日志记录类_日志记录_08            错误日志记录类_日志记录_06{

错误日志记录类_文件路径_09                if (!File.Exists(filePath))

错误日志记录类_构造函数_07错误日志记录类_日志记录_08                错误日志记录类_日志记录_06{

错误日志记录类_文件路径_09                    sw = File.CreateText(filePath);

错误日志记录类_错误日志_10                }

错误日志记录类_文件路径_09                else

错误日志记录类_构造函数_07错误日志记录类_日志记录_08                错误日志记录类_日志记录_06{

错误日志记录类_文件路径_09                    sw = File.AppendText(filePath);

错误日志记录类_错误日志_10                }

错误日志记录类_文件路径_09

错误日志记录类_文件路径_09                //设置写入文件的文本

错误日志记录类_文件路径_09                //string msg = string.Format("{0}---------Log Time:{1}--------{0}{2}", System.Environment.NewLine, System.DateTime.Now.ToString(), text);

错误日志记录类_文件路径_09

错误日志记录类_文件路径_09                string msg = string.Format("\r\n---------Log Time:{0}--------\r\n{1}", System.DateTime.Now.ToString(), text);

错误日志记录类_文件路径_09

错误日志记录类_文件路径_09                sw.WriteLine(msg);

错误日志记录类_文件路径_09                //sw.WriteLine(text);

错误日志记录类_文件路径_09

错误日志记录类_错误日志_10            }

错误日志记录类_文件路径_09            finally

错误日志记录类_构造函数_07错误日志记录类_日志记录_08            错误日志记录类_日志记录_06{

错误日志记录类_文件路径_09                if (sw != null)

错误日志记录类_构造函数_07错误日志记录类_日志记录_08                错误日志记录类_日志记录_06{

错误日志记录类_文件路径_09                    sw.Close();

错误日志记录类_文件路径_09                    sw = null;

错误日志记录类_错误日志_10                }

错误日志记录类_错误日志_10            }

错误日志记录类_错误日志_10        }

错误日志记录类_错误日志_10        #endregion

错误日志记录类_文件路径_09

错误日志记录类_文件路径_09        //-------------

错误日志记录类_错误日志_10    }

错误日志记录类_错误日志_137}

错误日志记录类_日志记录

记录错误内容同时记录下出错时间,方便程序查错


2.在确认可能产生错误地方使用以下语捕获错误并记录到日志

错误日志记录类_日志记录            try

错误日志记录类_日志记录_04错误日志记录类_错误日志_05            错误日志记录类_日志记录_06{

错误日志记录类_文件路径_09                dt = CSST.WMS.DAL.DealerDAL.SelectAll().Tables[0];

错误日志记录类_文件路径_09                this.dataGridView.DataSource = dt;

错误日志记录类_错误日志_137            }

错误日志记录类_日志记录            catch (SqlException ex)

错误日志记录类_日志记录_04错误日志记录类_错误日志_05            错误日志记录类_日志记录_06{

错误日志记录类_文件路径_09                Utility.LogMsg.WriteLogToApplicationFolderByMonth(ex.ToString());

错误日志记录类_错误日志_137            }

错误日志记录类_日志记录            catch (Exception ex)

错误日志记录类_日志记录_04错误日志记录类_错误日志_05            错误日志记录类_日志记录_06{

错误日志记录类_文件路径_09                Utility.LogMsg.WriteLogToApplicationFolderByMonth(ex.ToString());

错误日志记录类_错误日志_137            }

错误日志记录类_日志记录

3.一般来说并不是所有的错误我们都可以捕获得到,这种情况下,我们可以为Application的ThreadException事件编写错误日志记录功能来实记录下所有在运行时发生的错误...




作者:​​水木​​    



项目中经常需要使用到对软件发生错误的日志记录,关于此,很多公司及组织已经做了很多工作,比如可以使用Microsoft提供的Microsoft Enterprise Library January 2006(最新版为2007APril,但是个人现在习惯于使用2006版,版 本为2.0)中的日志记录模块或是开源项目NLOG等,这些东东一般来说功能都比较强大,但是上手可能并不是那么容易,其实一般来说我们主要需要记录的信息无非是发生错误的时间及出错原因及其他一些方便我们查找程序错误所需要的内容,我们可以让它记录到一个文本文件中,这样即时软件发布到客户手中使用时,如果在使用过程中发生什么错误,我们可以要求客户提供此错误日志供我们查错使用,下面说说我在项目中使用的错误日志记录功能的一些实现方法,

1.先定义一个记录错误日志的类,类内容如下

错误日志记录类_日志记录using System.IO;

错误日志记录类_日志记录

错误日志记录类_日志记录namespace CSST.WMS.UI.Utility

错误日志记录类_日志记录_04错误日志记录类_错误日志_05错误日志记录类_日志记录_06{

错误日志记录类_构造函数_07错误日志记录类_日志记录_08    /**//// <summary>

错误日志记录类_文件路径_09    /// 文本日志记录类,成员函数均为静态函数,直接调用即可

错误日志记录类_错误日志_10    /// </summary>

错误日志记录类_文件路径_09    public class LogMsg

错误日志记录类_构造函数_07错误日志记录类_日志记录_08    错误日志记录类_日志记录_06{

错误日志记录类_日志记录_08错误日志记录类_构造函数_07        常量定义#region 常量定义

错误日志记录类_构造函数_07错误日志记录类_日志记录_08        /**//// <summary>

错误日志记录类_文件路径_09        /// 程序目录名

错误日志记录类_文件路径_09        /// (一般根据需要修改此变量值即可)

错误日志记录类_错误日志_10        /// </summary>

错误日志记录类_文件路径_09        private const string FolderName = "EventLog";

错误日志记录类_文件路径_09

错误日志记录类_构造函数_07错误日志记录类_日志记录_08        /**//// <summary>

错误日志记录类_文件路径_09        /// 日志文件名

错误日志记录类_文件路径_09        /// (全名或后缀名,按日分类时为后缀名)

错误日志记录类_错误日志_10        /// </summary>

错误日志记录类_文件路径_09        private const string logFileName = "Log.Log";

错误日志记录类_错误日志_10        #endregion

错误日志记录类_文件路径_09

错误日志记录类_日志记录_08错误日志记录类_构造函数_07        构造函数#region 构造函数

错误日志记录类_构造函数_07错误日志记录类_日志记录_08        /**//// <summary>

错误日志记录类_文件路径_09        /// 私有构造函数,不允许直接实例化

错误日志记录类_错误日志_10        /// </summary>

错误日志记录类_文件路径_09        private LogMsg()

错误日志记录类_构造函数_07错误日志记录类_日志记录_08        错误日志记录类_日志记录_06{

错误日志记录类_文件路径_09            //

错误日志记录类_错误日志_10        }

错误日志记录类_错误日志_10        #endregion

错误日志记录类_文件路径_09

错误日志记录类_日志记录_08错误日志记录类_构造函数_07        记录错误日志到文本文件到我的文档目录#region 记录错误日志到文本文件到我的文档目录

错误日志记录类_文件路径_09

错误日志记录类_构造函数_07错误日志记录类_日志记录_08        /**//// <summary>

错误日志记录类_文件路径_09        /// 记录错误日志到文本文件到我的文档目录

错误日志记录类_文件路径_09        /// 按月分,每月产生一个日志文件

错误日志记录类_文件路径_09        /// </summary>

错误日志记录类_错误日志_10        /// <param name="text">日志内容</param>

错误日志记录类_文件路径_09        static public void WriteLogToApplicationFolderByMonth(string text)

错误日志记录类_构造函数_07错误日志记录类_日志记录_08        错误日志记录类_日志记录_06{

错误日志记录类_文件路径_09            //string folderPath = System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\My Tests\\Log1";

错误日志记录类_文件路径_09

错误日志记录类_文件路径_09

错误日志记录类_文件路径_09            //格式化文件夹字符串

错误日志记录类_文件路径_09            string folderPath = string.Format("{0}\\{1}\\Year_{2}", System.Windows.Forms.Application.StartupPath, FolderName, System.DateTime.Now.ToString("yyyy"));

错误日志记录类_文件路径_09

错误日志记录类_文件路径_09            if (!Directory.Exists(folderPath))

错误日志记录类_构造函数_07错误日志记录类_日志记录_08            错误日志记录类_日志记录_06{

错误日志记录类_文件路径_09                Directory.CreateDirectory(folderPath);

错误日志记录类_错误日志_10            }

错误日志记录类_文件路径_09

错误日志记录类_文件路径_09            //格式化文件路径字符串

错误日志记录类_文件路径_09            string filePath = string.Format("{0}\\Month_{1}_{2}", folderPath, System.DateTime.Today.ToString("MM"), logFileName);

错误日志记录类_文件路径_09

错误日志记录类_文件路径_09            LogToFile(filePath, text);

错误日志记录类_错误日志_10        }

错误日志记录类_文件路径_09

错误日志记录类_错误日志_10        #endregion

错误日志记录类_文件路径_09

错误日志记录类_日志记录_08错误日志记录类_构造函数_07        记录文本到文本文件#region 记录文本到文本文件

错误日志记录类_构造函数_07错误日志记录类_日志记录_08        /**//// <summary>

错误日志记录类_文件路径_09        /// 记录文本到文本文件(根据微软MSDN2005帮助文档System.IO.File.AppendText()提供的示例修改)

错误日志记录类_文件路径_09        /// </summary>

错误日志记录类_文件路径_09        /// <param name="filePath">文件路径</param>

错误日志记录类_错误日志_10        /// <param name="text">记录内容</param>

错误日志记录类_文件路径_09        static private void LogToFile(string filePath, string text)

错误日志记录类_构造函数_07错误日志记录类_日志记录_08        错误日志记录类_日志记录_06{

错误日志记录类_文件路径_09            //-------------------

错误日志记录类_文件路径_09            StreamWriter sw = null;

错误日志记录类_文件路径_09            try

错误日志记录类_构造函数_07错误日志记录类_日志记录_08            错误日志记录类_日志记录_06{

错误日志记录类_文件路径_09                if (!File.Exists(filePath))

错误日志记录类_构造函数_07错误日志记录类_日志记录_08                错误日志记录类_日志记录_06{

错误日志记录类_文件路径_09                    sw = File.CreateText(filePath);

错误日志记录类_错误日志_10                }

错误日志记录类_文件路径_09                else

错误日志记录类_构造函数_07错误日志记录类_日志记录_08                错误日志记录类_日志记录_06{

错误日志记录类_文件路径_09                    sw = File.AppendText(filePath);

错误日志记录类_错误日志_10                }

错误日志记录类_文件路径_09

错误日志记录类_文件路径_09                //设置写入文件的文本

错误日志记录类_文件路径_09                //string msg = string.Format("{0}---------Log Time:{1}--------{0}{2}", System.Environment.NewLine, System.DateTime.Now.ToString(), text);

错误日志记录类_文件路径_09

错误日志记录类_文件路径_09                string msg = string.Format("\r\n---------Log Time:{0}--------\r\n{1}", System.DateTime.Now.ToString(), text);

错误日志记录类_文件路径_09

错误日志记录类_文件路径_09                sw.WriteLine(msg);

错误日志记录类_文件路径_09                //sw.WriteLine(text);

错误日志记录类_文件路径_09

错误日志记录类_错误日志_10            }

错误日志记录类_文件路径_09            finally

错误日志记录类_构造函数_07错误日志记录类_日志记录_08            错误日志记录类_日志记录_06{

错误日志记录类_文件路径_09                if (sw != null)

错误日志记录类_构造函数_07错误日志记录类_日志记录_08                错误日志记录类_日志记录_06{

错误日志记录类_文件路径_09                    sw.Close();

错误日志记录类_文件路径_09                    sw = null;

错误日志记录类_错误日志_10                }

错误日志记录类_错误日志_10            }

错误日志记录类_错误日志_10        }

错误日志记录类_错误日志_10        #endregion

错误日志记录类_文件路径_09

错误日志记录类_文件路径_09        //-------------

错误日志记录类_错误日志_10    }

错误日志记录类_错误日志_137}

错误日志记录类_日志记录


记录错误内容同时记录下出错时间,方便程序查错


2.在确认可能产生错误地方使用以下语捕获错误并记录到日志

错误日志记录类_日志记录            try

错误日志记录类_日志记录_04错误日志记录类_错误日志_05            错误日志记录类_日志记录_06{

错误日志记录类_文件路径_09                dt = CSST.WMS.DAL.DealerDAL.SelectAll().Tables[0];

错误日志记录类_文件路径_09                this.dataGridView.DataSource = dt;

错误日志记录类_错误日志_137            }

错误日志记录类_日志记录            catch (SqlException ex)

错误日志记录类_日志记录_04错误日志记录类_错误日志_05            错误日志记录类_日志记录_06{

错误日志记录类_文件路径_09                Utility.LogMsg.WriteLogToApplicationFolderByMonth(ex.ToString());

错误日志记录类_错误日志_137            }

错误日志记录类_日志记录            catch (Exception ex)

错误日志记录类_日志记录_04错误日志记录类_错误日志_05            错误日志记录类_日志记录_06{

错误日志记录类_文件路径_09                Utility.LogMsg.WriteLogToApplicationFolderByMonth(ex.ToString());

错误日志记录类_错误日志_137            }

错误日志记录类_日志记录

3.一般来说并不是所有的错误我们都可以捕获得到,这种情况下,我们可以为Application的ThreadException事件编写错误日志记录功能来实记录下所有在运行时发生的错误...