標籤:
1.這是處理異常的類
public class MyExceptionAttribute:HandleErrorAttribute { //public static Queue<Exception> ExceptionQueue = new Queue<Exception>(); //項目中使用下面方式建立redisclient public static IRedisClientsManager clientManager = new PooledRedisClientManager(new string[] { "127.0.0.1:6379" }); public static IRedisClient redisClient = clientManager.GetClient(); /// <summary> /// 捕獲異常 /// </summary> /// <param name="filterContext"></param> public override void OnException(ExceptionContext filterContext) { base.OnException(filterContext); Exception ex = filterContext.Exception; //寫到隊列 //ExceptionQueue.Enqueue(ex); redisClient.EnqueueItemOnList("errorQueue", ex.ToString()); //跳轉到錯誤頁面. filterContext.HttpContext.Response.Redirect("/Error.html"); } }
2.Global檔案中配置
public class MvcApplication : SpringMvcApplication //System.Web.HttpApplication { protected void Application_Start() { log4net.Config.XmlConfigurator.Configure();//讀取了設定檔中關於Log4Net配置資訊. AreaRegistration.RegisterAllAreas(); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); //開啟一個線程,掃描異常資訊隊列。 string filePath = Server.MapPath("/Log/"); ThreadPool.QueueUserWorkItem((a) => { while (true) { //判斷一下隊列中是否有資料 //if (MyExceptionAttribute.ExceptionQueue.Count() > 0) if (MyExceptionAttribute.redisClient.GetListCount("errorQueue") > 0) { string errorMsg =MyExceptionAttribute.redisClient.DequeueItemFromList("errorQueue"); { //Exception ex = MyExceptionAttribute.ExceptionQueue.Dequeue(); if (!string.IsNullOrEmpty(errorMsg)) { //將異常資訊寫到記錄檔中。 //string fileName = DateTime.Now.ToString("yyyy-MM-dd"); //File.AppendAllText(filePath+fileName+".txt",ex.ToString(),System.Text.Encoding.UTF8); ILog logger = LogManager.GetLogger("errorMsg"); logger.Error(errorMsg); } else { //如果隊列中沒有資料,休息 Thread.Sleep(3000); } } } else { //如果隊列中沒有資料,休息 Thread.Sleep(3000); } } },filePath); } }
3.不要忘記使用Redis需要的3個dll檔案
使用Redis分布式隊列