第一步:在Global.asax文件下的Application_Error()中写入操作日志
/// <summary> /// 整个网站出现异常信息,都会执行此方法 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void Application_Error(object sender, EventArgs e) { if (string.IsNullOrEmpty(Common.LogHelper.LogBasePath)) //文件的绝对物理路径 { Common.LogHelper.LogBasePath = Request.MapPath("/Log"); } //往错误消息的队列里面写一个错误消息 Common.LogHelper.ExcpetionInfoQueue.Enqueue(Server.GetLastError().ToString()); //整个网站出现了未捕获的异常,一般就是跳转到一个错误页面 //提醒错误,然后隔几秒跳回首页 Response.Redirect("/WebForm1.aspx"); }
第二步:日志操作文件类
1 using System; 2 using System.Collections.Generic; 3 using System.IO; 4 using System.Text; 5 using System.Threading; 6 using System.Web; 7 8 namespace Common 9 { 10 /// <summary> 11 /// 日志文件操作类 12 /// </summary> 13 public class LogHelper 14 { 15 public static string LogBasePath; //物理绝对路径 16 public static Queue<string> ExcpetionInfoQueue = new Queue<string>(); //日志消息队列 17 static LogHelper() 18 { 19 ThreadPool.QueueUserWorkItem(o => 20 { 21 while (true) 22 { 23 lock (ExcpetionInfoQueue) 24 { 25 if (ExcpetionInfoQueue.Count > 0) 26 { 27 //写入错误消息 28 string strFileName = DateTime.Now.ToString(@"yyyy-MM-dd") + ".txt"; 29 string absoluteFileName = Path.Combine(LogBasePath,strFileName); 30 using (FileStream fs = new FileStream(absoluteFileName, FileMode.Append, FileAccess.Write)) 31 { 32 string strError = ExcpetionInfoQueue.Dequeue(); //错误消息 33 byte[] buffer = Encoding.Default.GetBytes(strError); 34 fs.Write(buffer, 0, buffer.Length); 35 } 36 } 37 } 38 } 39 }); 40 } 41 } 42 }
后续还会更新用log4Net记录报错日志消息