.Net Mvc过滤器观察者模式记录网站报错信息
Posted chenyanbin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.Net Mvc过滤器观察者模式记录网站报错信息相关的知识,希望对你有一定的参考价值。
基本介绍:
观察者模式是一种对象行为模式。它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。在观察者模式中,主题是通知的发布者,它发出通知时并不需要知道谁是它的观察者,可以有任意数目的观察者订阅并接收通知。观察者模式不仅被广泛应用于软件界面元素之间的交互,在业务对象之间的交互、权限管理等方面也有广泛的应用。
第一步:自定义过滤器错误类(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
第二步:改造RegisterGlobalFilters.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
第三步:观察者模式实现操作日志
日志接口(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
以上是关于.Net Mvc过滤器观察者模式记录网站报错信息的主要内容,如果未能解决你的问题,请参考以下文章