《WebApi》----将异常堆栈信息写入日志文件

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013067402/article/details/52170884

    以前我们的程序如果在开发中出现错误,我们可以轻松捕获异常信息,但是如果是程序在服务器上运行,并且是生产环境的服务器,如果这时候程序出现异常,我们既不想让错误信息暴露给用户,这样对用户不友好,也不行将错误信息吞并,吞并的话不利于我们Debug,那么,现在小编给提供个好办法,将异常信息写入到日志中。

    小编做的项目目前服务器程序运行的是WebApi,我们可以写一个日志类,此类可以将错误的堆栈信息写入txt文件,下面是代码。

    1、日志类代码

public class Log
    {
        /// <summary>
        /// 写入日志.
        /// </summary>
        /// <param name="strList"></param>
        /// <remarks>  </remarks>
        /// <Description>将错误信息写入日志文件(*.txt)</Description>
        public static void WriteLog(params object[] strList)
        {
            //如果传过strList无内容,直接返回,不写日志
            if (strList.Count() == 0) return;
			//获取本地服务器路径
            string strDicPath = System.Web.HttpContext.Current.Server.MapPath("~/temp/log/");
			//创建日志路径
            string strPath = strDicPath + string.Format("{0:yyyy年-MM月-dd日}", DateTime.Now) + "日志记录.txt";
			//如果服务器路径不存在,就创建一个
            if (!Directory.Exists(strDicPath)) Directory.CreateDirectory(strDicPath);
			//如果日志文件不存在,创建一个
            if (!File.Exists(strPath)) using (FileStream fs = File.Create(strPath)) ;
			//读取日志文件中的信息
            string str = File.ReadAllText(strPath);
            StringBuilder sb = new StringBuilder();
			//将错误信息写入sb
            foreach (var item in strList)
            {
                sb.Append("\r\n" + DateTime.Now.ToString() + "-----" + item + "");
            }
			//将错误信息写入txt
            File.WriteAllText(strPath, sb.ToString() + "\r\n-----z-----\r\n" + str);
        }


        /// <summary>
        /// 写入日志.
        /// </summary>
        /// <param name="strList">The STR list.</param>
        /// <remarks></remarks>
        /// <Description></Description>
        public static void WriteLog(Action DefFunc, Func<string> ErrorFunc = null)
        {
            try
            {
                DefFunc();
            }
            catch (Exception ex)
            {
                string strDicPath = System.Web.HttpContext.Current.Server.MapPath("~/temp/log/");
                string strPath = strDicPath + string.Format("{0:yyyy年-MM月-dd日}", DateTime.Now) + "日志记录.txt";
                if (!Directory.Exists(strDicPath)) Directory.CreateDirectory(strDicPath);
                if (!File.Exists(strPath)) using (FileStream fs = File.Create(strPath)) ;
                string str = File.ReadAllText(strPath);
                StringBuilder sb = new StringBuilder();
                if (ErrorFunc != null)
                {
                    sb.Append("\r\n" + DateTime.Now.ToString() + "-----" + ErrorFunc());
                }
                sb.Append("\r\n" + DateTime.Now.ToString() + "-----" + ex.Message);
                sb.Append("\r\n" + DateTime.Now.ToString() + "-----" + ex.StackTrace);
                File.WriteAllText(strPath, sb.ToString() + "\r\n--z--------\r\n" + str);

            }
        }
    }<span style="font-size:18px;"></span>

    2、业务逻辑代码

    我们将有可能出现的业务逻辑代码用Try...Catch包起来,在Catch中调用日志类,写入异常信息。代码如下

public List<EmployeeServices> LoadData()
        {
            try
            {

               //我们的业务逻辑代码
	       //我在此省略
            }
            catch (Exception ex)
            {
				//调用日志类的写日志的方法,将错误信息传入
                Log.WriteLog(ex.Message);
				//调用日志类的写日志的方法,将错误堆栈跟踪信息传入
                Log.WriteLog(ex.StackTrace);
                throw;
            }

        }

    这个方法在帮助我们调试服务器的程序的时候非常有帮助,将错误信息写入txt文件,我们可以很清楚的查找出代码出错在哪行,因为什么出错,这个可是一个DeBug的好助手啊!


展开阅读全文

没有更多推荐了,返回首页