.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 ...
随机推荐
- 简单学习之json格式说明
json格式说明: 1.对象是一个无序的“‘名称/值’对”集合. (1)一个对象以“{”(左括号)开始,“}”(右括号)结束. (2)每个“名称”后跟一个“:”(冒号): (3)“‘名称/值’ 对”之 ...
- android_viewFlipper(一)
需要注意的地方已在代码中表明 package cn.com.sxp; import android.app.Activity; import android.os.Bundle; import and ...
- I/O:RandomAccessFile
RandomAccessFile: /* 此类的实例支持对随机访问文件的读取和写入.随机访问文件的行为类似存储在文件系统中的一个 大型 byte 数组.存在指向该隐含数组的光标或索引,称为文件指针:输 ...
- form 利用BeginCollectionItem提交集合List<T>数据 以及提交的集合中含有集合的数据类型 如List<List<T>> 数据的解决方案
例子: public class IssArgs { public List<IssTabArgs> Tabs { get; set; } } public class IssTabArg ...
- 每日一问:Android 消息机制,我有必要再讲一次!
坚持原创日更,短平快的 Android 进阶系列,敬请直接在微信公众号搜索:nanchen,直接关注并设为星标,精彩不容错过. 我 17 年的 面试系列,曾写过一篇名为:Android 面试(五):探 ...
- C#写好的类库dll在别人调用的时候也能看到注释的方法
1.用///的方法添加注释 2.项目的属性里面,要选上"生成XML注释文档" 菜单 Project -> 'xxxx' Properties -> Build -> ...
- luogu题解 P5022 【旅行】
本人的代码可以说洛谷最简单的了 我的存图方式有些与众不同 a[5000][5000]中第一个下标表示第几个点,第二个表示与点相连的点 虽然比前向星废内存但时间极快,大概是O(n)的. 现在步入正题 6 ...
- lnmp php使用命令行去备份数据库
<?php //备份数据库we8和foshan $time = date("Y-m-d",time()); $backtime = date("Y-m-d" ...
- C#航空查询及预订
关于航空查询及预订项目中出现的问题 namespace Flight{ public partial class Flight : Form { public Flight() { Initializ ...
- Angular JS 中的内置方法之表单验证
angular js 结合html5 可以实现强大的表单验证功能 关闭html5自带的表单验证功能可以用