.Net Mvc过滤器观察者模式记录网站报错信息
基本介绍:
观察者模式是一种对象行为模式。它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。在观察者模式中,主题是通知的发布者,它发出通知时并不需要知道谁是它的观察者,可以有任意数目的观察者订阅并接收通知。观察者模式不仅被广泛应用于软件界面元素之间的交互,在业务对象之间的交互、权限管理等方面也有广泛的应用。
第一步:自定义过滤器错误类(MyExceptionFilterAttribute.cs)
using Sam.OA.Common;
using System.Web.Mvc; namespace Sam.OA.WEBAPP.Models
{
public class MyExceptionFilterAttribute: HandleErrorAttribute
{
public override void OnException(ExceptionContext filterContext)
{
base.OnException(filterContext);
LogHelper.WriteLog(filterContext.Exception.ToString());
}
}
}
第二步:改造RegisterGlobalFilters.cs
using Sam.OA.WEBAPP.Models;
using System.Web.Mvc; namespace Sam.OA.WEBAPP
{
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
//filters.Add(new HandleErrorAttribute());
filters.Add(new MyExceptionFilterAttribute()); //添加自定义错误类
}
}
}
第三步:观察者模式实现操作日志
日志接口(ILogWrite.cs)
namespace Sam.OA.Common
{
/// <summary>
/// 日志文件接口
/// </summary>
public interface ILogWrite
{
void WriteLogInfo(string txt);
}
}
记录文件中(TextFileWriter.cs)
namespace Sam.OA.Common
{
public class TextFileWriter : ILogWrite
{
/// <summary>
/// 将错误信息记录到文件中
/// </summary>
/// <param name="txt"></param>
public void WriteLogInfo(string txt)
{
//具体实现方法略。。。。
}
}
}
记录SqlServer中(SqlServerWriter.cs)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace Sam.OA.Common
{
public class SqlServerWriter : ILogWrite
{
/// <summary>
/// 记录SqlServer数据库中
/// </summary>
/// <param name="txt"></param>
public void WriteLogInfo(string txt)
{
//具体实现方式略。。。。
}
}
}
日志文件帮助类(LogHelper.cs)
using System;
using System.Collections.Generic;
using System.Threading; namespace Sam.OA.Common
{
public class LogHelper
{
public static Queue<string> ExceptionStringQueue = new Queue<string>();
public static List<ILogWrite> LogWriteList = new List<ILogWrite>();
static LogHelper()
{
LogWriteList.Add(new TextFileWriter());
LogWriteList.Add(new SqlServerWriter());
ThreadPool.QueueUserWorkItem(obj =>
{
while (true)
{
lock (ExceptionStringQueue)
{
if (ExceptionStringQueue.Count > )
{
string str = ExceptionStringQueue.Dequeue();
foreach (var logWrite in LogWriteList)
{
logWrite.WriteLogInfo(str);
}
}
else
{
Thread.Sleep();
}
}
}
});
}
public static void WriteLog(string exceptionText)
{
try
{
lock (ExceptionStringQueue)
{
ExceptionStringQueue.Enqueue(exceptionText);
}
}
catch (Exception ex)
{
throw ex;
}
}
}
}
.Net Mvc过滤器观察者模式记录网站报错信息的更多相关文章
- IIS发布网站 报错500.19 错误解决过程记录
首先先报上我的环境 WindowsServer 2012 IIS 8.5 网站是FrameWork 4.0 发布网站后浏览,报错信息如下: 解决过程记录如下: 1.看到这个问题首先想到的是权限问题,设 ...
- 网站报错Access denied for user 'root'@'localhost' -问题排查续
网站报错Access denied for user 'root'@'localhost' (using password: YES) 每次的挽救办法就是: /etc/init.d/mysqld st ...
- Python使用requests模块访问HTTPS网站报错`certificate verify failed`
使用requests模块访问HTTPS网站报错: SNIMissingWarning: An HTTPS request has been made, but the SNI (Subject Nam ...
- 【转载】访问IIS中网站出现 403.14 - Forbidden报错信息
将网站发布后部署到IIS后,配置完应用程序池以及相关设置项后,在浏览器中访问设置好的网站,出现403.14 - Forbidden的错误信息,从错误信息的提示来看,应该是IIS服务器此网站目录的内容被 ...
- Drupal网站报错:PDOException: in lock_may_be_available()
Drupal网站报错: 原因: windows中mysql的服务停止了: 解决办法: 在服务中,启动mysql服务 启动后,刷新页面,问题完美解决
- vue2.X版本vue-cli生成项目后运行失败,报错信息为getaddrinfo ENOTFOUND localhost
问题: 1.使用vue-cli生成项目 2.npm install 3.npm run dev,报错信息如下 解决方法: 经查,发现package.json中dev的脚本变成了"webpac ...
- python中如何通过报错信息定位问题(异常传播轨迹)
class SelfException(Exception): pass def main(): firstMethod() def firstMethod(): secondMethod() def ...
- Python 装饰器填坑指南 | 最常见的报错信息、原因和解决方案
本文为霍格沃兹测试学院学员学习笔记. Python 装饰器简介 装饰器(Decorator)是 Python 非常实用的一个语法糖功能.装饰器本质是一种返回值也是函数的函数,可以称之为“函数的函数”. ...
- SVN Cornerstone 报错信息 xcodeproj cannot be opened because the project file cannot be parsed.
svn点击update 之后,打开xcode工程文件,会出现 xxx..xcodeproj cannot be opened becausethe project file cannot be p ...
随机推荐
- C语言指针专题——如何理解指针
本文为原创,欢迎转发! 最近在研读C primer plus 5版中文版,老外写的,还是很经典的,推荐给读者们,有需要的朋友可以在这里购买:C primer plus 5版中文版 指针,传说中是C语言 ...
- 跟着大彬读源码 - Redis 5 - 对象和数据类型(上)
相信很多人应该都知道 Redis 有五种数据类型:字符串.列表.哈希.集合和有序集合.但这五种数据类型是什么含义?Redis 的数据又是怎样存储的?今天我们一起来认识下 Redis 这五种数据结构的含 ...
- 编译Tomcat9源码及tomcat乱码问题解决
因工作原因,需要从根本上优化tomcat的配置,故准备从源码入手,看看可以做哪些工作. 1. tomcat下载 tomcat最新的版本为9,下载源码的方式有3种: 1/ 官方网站 https://to ...
- David与Vincent的博弈游戏[树型DP]
\(\mathcal{Description}\) \(\mathcal{Solution}\) 根据题意,我们知道 根节点深度为1,深度为 奇数 的节点由\(David\)移动,我们称为\(D\)点 ...
- linux初学者-squid代理篇
linux初学者-squid代理篇 Squid代理服务器是一种缓存服务器,一般分为正向代理和反向代理. 1.正向代理 客户端因为网络或者其他的问题,不能访问到一台Apache服务器,如果要访问到,则 ...
- Number() 与 parseInt()解析
在 Python 中,将字符串转为整型变量的函数是 int() ,直接使用 int("123")就可以得到 123的输出结果,这样可以比较快速的得到我们想要的结果,在 js 中将 ...
- 《HTML总结》
一.HTML简介 Hyper Text Markup Language(超文本标记语言) 超文本包括:文字.图片.音频.视频.动画等 二.HTML发展史 1993-6发布超文本标记语言 ....... ...
- webgl图库研究(包括BabylonJS、Threejs、LayaboxJS、SceneJS、ThingJS等框架的特性、适用范围、支持格式、优缺点、相关网址)
3D图库框架范围与示例 摘要: 为实现企业80%以上的生产数据进行智能转化,在烟草.造纸.能源.电力.机床.化肥等行业,赢得领袖企业青睐,助力企业构建AI赋能中心,实现智能化转型升级.“远舢文龙数据处 ...
- Chrome 使用 Evernote 插件
Chrome 插件不能登印象笔记进行裁剪,被困扰有段时间了.昨天偶然在知乎上找到了解决方法: 链接:https://www.zhihu.com/question/20340803/answer/291 ...
- Java基础之十五 泛型
第十五章 泛型 一般的类和方法,只能使用具体的类型:要么是基本类型,要么是自定义类型.如果要编写可以应用于多种类型的代码,这种刻板的限制对代码的束缚就会很大. 在面对对象编程语言中,多态算是一种泛化机 ...