标签:主题 thread 对象 class 模式 filters 报错信息 行为模式 hand
观察者模式是一种对象行为模式。它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。在观察者模式中,主题是通知的发布者,它发出通知时并不需要知道谁是它的观察者,可以有任意数目的观察者订阅并接收通知。观察者模式不仅被广泛应用于软件界面元素之间的交互,在业务对象之间的交互、权限管理等方面也有广泛的应用。
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 }
日志接口(ILogWrite.cs)
1 namespace Sam.OA.Common 2 { 3 /// <summary> 4 /// 日志文件接口 5 /// </summary> 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 /// <summary> 6 /// 将错误信息记录到文件中 7 /// </summary> 8 /// <param name="txt"></param> 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 /// <summary> 12 /// 记录SqlServer数据库中 13 /// </summary> 14 /// <param name="txt"></param> 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<ILogWrite> LogWriteList = new List<ILogWrite>(); 11 static LogHelper() 12 { 13 LogWriteList.Add(new TextFileWriter()); 14 LogWriteList.Add(new SqlServerWriter()); 15 ThreadPool.QueueUserWorkItem(obj => 16 { 17 lock (ExceptionStringQueue) 18 { 19 string str = ExceptionStringQueue.Dequeue(); 20 foreach (var logWrite in LogWriteList) 21 { 22 logWrite.WriteLogInfo(str); 23 } 24 } 25 }); 26 } 27 public static void WriteLog(string exceptionText) 28 { 29 try 30 { 31 lock (ExceptionStringQueue) 32 { 33 ExceptionStringQueue.Enqueue(exceptionText); 34 } 35 } 36 catch (Exception ex) 37 { 38 throw ex; 39 } 40 } 41 } 42 }
标签:主题 thread 对象 class 模式 filters 报错信息 行为模式 hand
原文地址:https://www.cnblogs.com/chenyanbin/p/11373817.html