.Net Mvc 필터 관찰자 모드에서 웹 사이트 오류 메시지 기록
기본 설명:
관찰자 모델은 일종의 대상 행위 모델이다.이것은 대상 간의 일대다 의존 관계를 정의하는데, 대상의 상태가 바뀔 때, 그 대상에 의존하는 모든 대상이 알림을 받고 자동으로 업데이트된다.관찰자 모드에서 주제는 알림의 발표자이다. 알림을 보낼 때 누가 관찰자인지 알 필요가 없고 임의의 관찰자가 구독하고 알림을 받을 수 있다.관찰자 모델은 소프트웨어 인터페이스 요소 간의 상호작용에 광범위하게 응용될 뿐만 아니라 업무 대상 간의 상호작용, 권한 관리 등 분야에서도 광범위하게 응용된다.
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 }
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 }
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 }
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 }
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.