普通錯誤日志記錄。


在開發項目的過程中,我們會遇到各種各樣的錯誤,那么接下來就說一下普通記錄錯誤日志的功能。

1、先導入命名

1、MVC中有一個異常過濾器,自己建立一個過濾器,並繼承自HandleErrorAttribute,在重寫一下OnException()方法。  

 1 namespace OA.APP.Error
 2 {
 3     public class MyExceptionAttribute:HandleErrorAttribute
 4     {
 5         //寫一個隊列,隊列類型是Exception類型,只要拋異常了,都同寫一個隊列,因此是靜態的。
 6         //Queue:是一個隊列類型。
 7         public Queue<Exception> queueException = new Queue<Exception>();
 8 
 9         /// <summary>
10         /// 重寫OnException方法,用於捕獲異常數據。
11         /// </summary>
12         /// <param name="filterContext"></param>
13         public override void OnException(ExceptionContext filterContext)
14         {
15             base.OnException(filterContext);
16             //獲取異常對象。
17             Exception ex = filterContext.Exception;
18             //把錯誤寫入到隊列中。  
19             queueException.Enqueue(ex);
20             //跳轉到自己定義的錯誤頁。
21             filterContext.HttpContext.Response.Redirect("/Error/ErrorHtml.html");
22         }
23     }
24 }

 

2、在App_Start()文件夾中的FilterConfig類中注冊自己寫的過濾器。

1 public class FilterConfig
2 {
3     public static void RegisterGlobalFilters(GlobalFilterCollection filters)
4     {
5         //filters.Add(new HandleErrorAttribute());
6         //注冊自己寫的異常過濾器。
7         filters.Add(new Error.MyExceptionAttribute());
8     }
9 }

3、在程序入口的地方(也就是Global文件中)開一個線程,用於掃描異常,並讓Global文件繼承自SpringMvcApplication

 1 //public class MvcApplication : System.Web.HttpApplication
 2 //SpringMvcApplication 繼承自System.Web.HttpApplication。
 3 public class MvcApplication : SpringMvcApplication
 4 {
 5     protected void Application_Start()
 6     {
 7         log4net.Config.XmlConfigurator.Configure();
 8 
 9         AreaRegistration.RegisterAllAreas();
10         WebApiConfig.Register(GlobalConfiguration.Configuration);
11         FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
12         RouteConfig.RegisterRoutes(RouteTable.Routes);
13         BundleConfig.RegisterBundles(BundleTable.Bundles);
14 
15         string fullPath = Server.MapPath("/Error/ErrorLog.txt");
16         string beginExceptionStr = DateTime.Now.ToString() + "----------->異常信息如下:\r\n";
17         string endExceptionStr = "\r\n\r\n";
18 
19         //QueueUserWorkItem()將方法排入列隊以便執行。在匿名函數中判斷隊列中是否有數據,以及寫錯誤信息到日志中。
20         //開啟一個線程,掃描異常信息隊列。
21         ThreadPool.QueueUserWorkItem((c) =>
22         {
23             while (true)
24             {
25                 //判斷隊列中是否否有數據。
26                 if (MyExceptionAttribute.QueueException.Count > 0)
27                 {
28                     //通過Dequeue()方法,拿到異常對象。
29                     Exception ex = MyExceptionAttribute.QueueException.Dequeue();
30                     if (ex != null)
31                     {
32                         //將異常對象,寫入到日志中。
33                         //使用File類的時候,如果文件不存在就會自己創建。
34                         //如果請求的控制器出現異常了,會在Error文件夾中生成一個ErrorLog.txt文件。
35                         File.AppendAllText(fullPath, beginExceptionStr + ex.ToString() + endExceptionStr);
36                     }
37                     else
38                     {
39                         System.Threading.Thread.Sleep(3000);
40                     }
41                 }
42                 else
43                 {
44                     //休眠3秒。
45                     Thread.Sleep(3000);
46                 }
47             }
48         });
49     }
50 }

4、如果請求的控制器拋異常了,那么會顯示錯誤信息。

    

5、格式如下:

  

End。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM