ExpandStackTrace

        /// <summary>
        /// 把一个异常的堆栈信息处理后返回一个字符串
        /// 一个异常可能是另一个异常实例引发的,这里通过递归把所有的异常消息都处理并返回信息,最后形成一个包含异常足够多信息的字符串
        /// </summary>
        /// <param name="ex">传输的异常</param>
        /// <returns>返回的字符串</returns>
        public static string ExpandStackTrace(Exception ex)
        {
            StringBuilder buffer = new StringBuilder(1024);
            while (ex != null)
            {
                if (buffer.Length > 0)
                {
                    buffer.Insert(0, ex.StackTrace + "\nRe-Thrown (" + ex.Message + ")\n");
                }
                else
                {
                    buffer.Insert(0, ex.StackTrace + "\n");
                }
                ex = ex.InnerException;
            }
            buffer.Replace(" in ", "\n\tin\n");
            return buffer.ToString();
        }

        public static void AppendLog(string content)
        {
            HttpContext context = HttpContext.Current;
            string path = String.Concat(context.Server.MapPath("~/Log/"), DateTime.Now.ToString("yyyyMMdd"), ".log");
            using (StreamWriter sw = new StreamWriter(path, true, Encoding.Default))
            {
                sw.Write(DateTime.Now.ToString());
                sw.Write('\t');
                sw.Write(HttpUtils.RemoteIP);
                sw.Write('\t');
                sw.Write(context.Request.UserAgent);
                sw.Write('\t');
                sw.Write(context.Request.HttpMethod);
                sw.Write('\t');
                sw.Write(context.Request.Url.PathAndQuery);
                sw.Write('\t');
                sw.Write(content);
                string referer = context.Request.ServerVariables["HTTP_REFERER"];
                if (referer != null)
                {
                    sw.Write('\t');
                    sw.Write("referer:");
                    sw.Write(referer);
                }
                sw.WriteLine();
            }
        }

原文地址:https://www.cnblogs.com/Googler/p/1950230.html