/// <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();
}
}