【转】ASP.NET MVC中错误日志信息记录
MVC中有一个处理异常的过滤器 HandleErrorAttribute
1.新建一个类继承自 HandleErrorAttribute,然后重写OnException这个方法
public class MyExceptionAttribute:HandleErrorAttribute
{
/// <summary>
/// 可捕获异常数据
/// </summary>
/// <param name="filterContext"></param>
public override void OnException(ExceptionContext filterContext)
{
base.OnException(filterContext);
Exception ex = filterContext.Exception;
//把错误信息写进队列
}
}
只要程序出错就会执行这个方法。
2.注册定义好的异常过虑器
打开App_Start文件夹中FilterConfig.cs修改
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
//filters.Add(new HandleErrorAttribute());
filters.Add(new MyExceptionAttribute());
}
验证一下:在1中定义的过虑器的ex行打一个断点,然后在控制器的action中增加一段出错的代码
public ActionResult Index()
{
int a = Convert.ToInt16("aaa");
return Content(a.ToString());
// return View();
}
运行可以看到效果:

3.把错误信息存到队列中
因为直接把错误写到日志会出现多个人同时操作日志文件,会造成并发的问题,所以把错误存到队列,然后从队列中把数据记录到文件中不会造成并发,修改过虑器。
public class MyExceptionAttribute:HandleErrorAttribute
{
//创建一个队列
public static Queue<Exception> execptionQueue = new Queue<Exception>();
/// <summary>
/// 可捕获异常数据
/// </summary>
/// <param name="filterContext"></param>
public override void OnException(ExceptionContext filterContext)
{
base.OnException(filterContext);
Exception ex = filterContext.Exception;
//把错误信息写进队列
execptionQueue.Enqueue(ex);
//跳转到错误页
filterContext.HttpContext.Response.Redirect("/Error.html");
}
}
4.开启一个新的线程不断的读取队列,把消息写入日志文件
读取消息应该在程序开始的时候就开始执行,在Global.asax.cs中添加代码
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas(); WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
string filePath = Server.MapPath("/Log/");
ThreadPool.QueueUserWorkItem((a) => {
while (true)
{
//判断一下队列中是否有数据
if (MyExceptionAttribute.execptionQueue.Count > )
{
//出队
Exception ex = MyExceptionAttribute.execptionQueue.Dequeue();
if (ex != null)
{
//将异常信息写到日志文件中
string fileName = DateTime.Now.ToString("yyyy-MM-dd");
File.AppendAllText(filePath + fileName + ".txt", ex.ToString(), System.Text.Encoding.UTF8);
}
else
{
//如果队列中没有数据,休息5秒钟
Thread.Sleep();
}
}
else
{
//如果队列中没有数据,休息
Thread.Sleep();
}
}
});
}
完成,执行一条出错语句,Log文件夹下就多了一个记录错误日志的文件了。
转自:https://www.cnblogs.com/wei325/p/5433288.html
【转】ASP.NET MVC中错误日志信息记录的更多相关文章
- ASP.NET MVC中错误日志信息记录
MVC中有一个处理异常的过滤器 HandleErrorAttribute 1.新建一个类继承自 HandleErrorAttribute,然后重写OnException这个方法 public clas ...
- ASP.NET MVC中解决日志并发处理log4net
本章主要内容是将异常信息写到队列中,然后通过线程写到文本文件中,速度非常快,没有阻塞和延迟加载 1.首先在Model中建一个类MyExceptionAttribute.cs public class ...
- ASP.NET MVC中错误处理方式
/// <summary> /// 标记了HandleError,并指明错误处理页为AboutError.aspx /// </summary> /// <returns ...
- ASP.NET MVC中Log4Net记录错误日志的使用
第一.在管理NuGet程序包 =>下载 Log4Net 第二.在web.config配置Log4Net 1:在<configuration>节点下 <configSection ...
- ASP.NET MVC中的错误处理
ASP.NET MVC中的错误的错误处理跨越了两个主要领域:程序异常和路由异常的处理.前者是关于在控制器和视图中捕获错误的;而后者更多是有关重定向和HTTP错误的. 1.在WebConfig中把过滤器 ...
- ASP.NET MVC 学习笔记-7.自定义配置信息 ASP.NET MVC 学习笔记-6.异步控制器 ASP.NET MVC 学习笔记-5.Controller与View的数据传递 ASP.NET MVC 学习笔记-4.ASP.NET MVC中Ajax的应用 ASP.NET MVC 学习笔记-3.面向对象设计原则
ASP.NET MVC 学习笔记-7.自定义配置信息 ASP.NET程序中的web.config文件中,在appSettings这个配置节中能够保存一些配置,比如, 1 <appSettin ...
- asp.net MVC中使用Html.Checkbox提示该字符串未被识别为有效的布尔值错误的解决方法
在asp.net MVC中使用Html.CheckBox提交后出现该字符串未被识别为有效的布尔值错误,或从类型“System.String”到类型“System.Boolean”的参数转换失败. 错误 ...
- ASP.NET MVC编程——错误处理与日记
ASP.NET MVC的错误处理应考虑到这几个方面:模型绑定期间发生的错误,未能路由到指定操作,针对控制器的错误处理.使用配置文件可以帮助我们处理异常,但是不够灵活和全面:使用HandleErrorA ...
- 玩转ASP.NET Core中的日志组件
简介 日志组件,作为程序员使用频率最高的组件,给程序员开发调试程序提供了必要的信息.ASP.NET Core中内置了一个通用日志接口ILogger,并实现了多种内置的日志提供器,例如 Console ...
随机推荐
- el-cascader 级联选择器使用时遇到的一些问题
Element UI Cascader官网文档 <el-form-item label="章节" style="margin-right: 64px"&g ...
- R语言通过loess去除某个变量对数据的影响--CNV分析
当我们想研究不同sample的某个变量A之间的差异时,往往会因为其它一些变量B对该变量的固有影响,而影响不同sample变量A的比较,这个时候需要对sample变量A进行标准化之后才能进行比较.标准化 ...
- perl hash array 嵌套 push
$hash{"A"}=["pp"];想变成:$hash{"A"}=["p","q"];因为 $has ...
- 更新:在MAC上安装RN开发环境的步骤(全)
总共分为三部: 1:按照官网(中文)上的步骤去安装jdk和android studio 2:配置SDK 3:安装虚拟机和模拟器 所以这里提出的是注意事项: 1:~/.bash_profile 文件里面 ...
- NOI2017 游记
成功在NOI2017退役……现在的我已经是一只退役狗了 结果也一直到了退役,我都还不会半平面交,不会单纯形,不会非旋转版Treap…… FWT我也不熟,分治FFT我也只写过一道板子题 但是现在已经退役 ...
- 数据库锁机制(以MySQL为例)
选自:https://blog.csdn.net/aluomaidi/article/details/52460844 https://www.zhihu.com/question/51513268/ ...
- [转]xml解析工具的效率比较QDomDocument、TinyXml-2、RapidXml、PugiXml
转自:http://www.itdaan.com/blog/2017/02/20/301ad47832f4.html 由于windows环境下测试不稳定,博主选择在linux下进行的测试! Qt - ...
- Vscode中运行js文件或部分代码 ,在下面cmd输出中显示结果
重启 vscode, 这个插件 真好用,, 赞个 ....
- Codeforces 960D - Full Binary Tree Queries
960D - Full Binary Tree Queries 思路: 用move1[i]记录第i层第1种操作移动的个数(对这一层的个数取模) 用move2[i]记录第i层第2种操作移动的个数(对这一 ...
- ionic 页面传递参数
1.使用AngularJS自带的$cacheFactory服务 $cacheFactory 从字面直译即为缓存工厂,可以用它来生成缓存对象,缓存对象以key-value的方式进行数据的存储,在整个应用 ...