.Net Mvc 필터 관찰자 모드에서 웹 사이트 오류 메시지 기록

17237 단어

기본 설명:


관찰자 모델은 일종의 대상 행위 모델이다.이것은 대상 간의 일대다 의존 관계를 정의하는데, 대상의 상태가 바뀔 때, 그 대상에 의존하는 모든 대상이 알림을 받고 자동으로 업데이트된다.관찰자 모드에서 주제는 알림의 발표자이다. 알림을 보낼 때 누가 관찰자인지 알 필요가 없고 임의의 관찰자가 구독하고 알림을 받을 수 있다.관찰자 모델은 소프트웨어 인터페이스 요소 간의 상호작용에 광범위하게 응용될 뿐만 아니라 업무 대상 간의 상호작용, 권한 관리 등 분야에서도 광범위하게 응용된다.

1단계: 필터 오류 클래스 사용자화(MyExceptionFilterAttribute.cs)

 1 using Sam.OA.Common;
 2 using System.Web.Mvc;
 3 
 4 namespace Sam.OA.WEBAPP.Models
 5 {
 6     public class MyExceptionFilterAttribute: HandleErrorAttribute
 7     {
 8         public override void OnException(ExceptionContext filterContext)
 9         {
10             base.OnException(filterContext);
11             LogHelper.WriteLog(filterContext.Exception.ToString());
12         }
13     }
14 }

2단계: Register Global Filters 개조cs

 1 using Sam.OA.WEBAPP.Models;
 2 using System.Web.Mvc;
 3 
 4 namespace Sam.OA.WEBAPP
 5 {
 6     public class FilterConfig
 7     {
 8         public static void RegisterGlobalFilters(GlobalFilterCollection filters)
 9         {
10             //filters.Add(new HandleErrorAttribute());
11             filters.Add(new MyExceptionFilterAttribute()); // 
12         }
13     }
14 }

3단계: 관찰자 모드 구현 조작 로그


로그 인터페이스(IlogWrite.cs)
 1 namespace Sam.OA.Common
 2 {
 3     /// 
 4     ///  
 5     /// 
 6     public interface ILogWrite
 7     {
 8         void WriteLogInfo(string txt);
 9     }
10 }

记录文件中(TextFileWriter.cs)

 1 namespace Sam.OA.Common
 2 {
 3     public class TextFileWriter : ILogWrite
 4     {
 5         /// 
 6         ///  
 7         /// 
 8         /// 
 9         public void WriteLogInfo(string txt)
10         {
11             // 。。。。
12         }
13     }
14 }

记录SqlServer中(SqlServerWriter.cs)

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace Sam.OA.Common
 8 {
 9     public class SqlServerWriter : ILogWrite
10     {
11         /// 
12         ///  SqlServer 
13         /// 
14         /// 
15         public void WriteLogInfo(string txt)
16         {
17             // 。。。。
18         }
19     }
20 }

日志文件帮助类(LogHelper.cs)

 

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Threading;
 4 
 5 namespace Sam.OA.Common
 6 {
 7     public class LogHelper
 8     {
 9         public static Queue<string> ExceptionStringQueue = new Queue<string>();
10         public static List LogWriteList = new List();
11         static LogHelper()
12         {
13             LogWriteList.Add(new TextFileWriter());
14             LogWriteList.Add(new SqlServerWriter());
15             ThreadPool.QueueUserWorkItem(obj =>
16             {
17                 while (true)
18                 {
19                     lock (ExceptionStringQueue)
20                     {
21                         if (ExceptionStringQueue.Count > 0)
22                         {
23                             string str = ExceptionStringQueue.Dequeue();
24                             foreach (var logWrite in LogWriteList)
25                             {
26                                 logWrite.WriteLogInfo(str);
27                             }
28                         }
29                         else
30                         {
31                             Thread.Sleep(30);
32                         }
33                     }
34                 }
35             });
36         }
37         public static void WriteLog(string exceptionText)
38         {
39             try
40             {
41                 lock (ExceptionStringQueue)
42                 {
43                     ExceptionStringQueue.Enqueue(exceptionText);
44                 }
45             }
46             catch (Exception ex)
47             {
48                 throw ex;
49             }
50         }
51     }
52 }

좋은 웹페이지 즐겨찾기