利用队列记录错误日志
2018-06-22 07:48:23来源:未知 阅读 ()
日志是给程序猿看的。
具体步骤:
1、创建一个WebApplication
2、[可以在Model文件夹里创建一个类MyExceptionAttribute.cs]
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.Mvc; 6 7 namespace WebApp.Models 8 { 9 //继承HandleErrorAttribute,在/App_Start/FilterConfig.cs中 添加MyExceptionAttribute的控制 10 public class MyExceptionAttribute:HandleErrorAttribute 11 { 12 //创建一个队列 静态 所有异常都在同一个队列中 处理 13 public static Queue<Exception> ExceptionQueue = new Queue<Exception>(); 14 public override void OnException(ExceptionContext filterContext) 15 { 16 base.OnException(filterContext); 17 Exception ex = filterContext.Exception; 18 //写到队列中 19 ExceptionQueue.Enqueue(ex); 20 //跳转到 错误页 21 filterContext.HttpContext.Response.Redirect("/error.html"); 22 } 23 } 24 }
2.1、让MyExceptionAttribute继承HandleErrorAttribute、并重写OnException方法。
2.2创建一个静态队列,使所有 错误日志都在同一个队列中进行
public static Queue<Exception> ExceptionQueue = new Queue<Exception>();
3、需要将MyExceptionAttribute在 FilterConfig.cs(/App_Start/ FilterConfig.cs)中进行标记
1 using System.Web; 2 using System.Web.Mvc; 3 using WebApp.Models; 4 5 namespace WebApp 6 { 7 public class FilterConfig 8 { 9 public static void RegisterGlobalFilters(GlobalFilterCollection filters) 10 { 11 //filters.Add(new HandleErrorAttribute()); 12 filters.Add(new MyExceptionAttribute()); 13 } 14 } 15 }
4、然后在Global.asax开启线程,将队列中的错误日志写入txt文件中。
1 using System; 2 using System.Collections.Generic; 3 using System.IO; 4 using System.Linq; 5 using System.Threading; 6 using System.Web; 7 using System.Web.Mvc; 8 using System.Web.Optimization; 9 using System.Web.Routing; 10 using WebApp.Models; 11 12 namespace WebApp 13 { 14 public class MvcApplication : System.Web.HttpApplication 15 { 16 protected void Application_Start() 17 { 18 AreaRegistration.RegisterAllAreas(); 19 FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 20 RouteConfig.RegisterRoutes(RouteTable.Routes); 21 BundleConfig.RegisterBundles(BundleTable.Bundles); 22 //开启线程 将队列中的异常 写入文件中 23 //开启一个线程 扫描队列 24 string filePath = Server.MapPath("/Log/"); 25 ThreadPool.QueueUserWorkItem((a) => 26 { 27 while (true) 28 { 29 //判断一下队列中是否 有数据 30 if (MyExceptionAttribute.ExceptionQueue.Count() > 0) 31 { 32 Exception ex = MyExceptionAttribute.ExceptionQueue.Dequeue(); 33 if (ex != null) 34 { 35 //将异常 信息写入文件中 36 string fileName = DateTime.Now.ToString("yyyy-MM-dd"); 37 File.AppendAllText(fileName + ".txt", ex.ToString(), System.Text.Encoding.UTF8); 38 } 39 else 40 { 41 //如果队列中没有数据 休闲 3000 42 Thread.Sleep(3000); 43 } 44 } 45 else 46 { 47 //如果队列中没有数据 休闲 3000 48 Thread.Sleep(3000); 49 } 50 51 } 52 },filePath); 53 } 54 } 55 }
4.1、使用线程池ThreadPool中的QueueUserWorkItem方法,QueueUserWorkItem有两个重载,F12查看。
4.2如果队列中没有数据,则休息Thread.Sleep(3000);
5、新建一个控制器Test。进行测试
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.Mvc; 6 7 namespace WebApp.Controllers 8 { 9 public class TestController : Controller 10 { 11 // 12 // GET: /Test/ 13 public ActionResult Index() 14 { 15 return View(); 16 } 17 public ActionResult ShowResult() 18 { 19 int a = 2; 20 int b = 0; 21 int c = a / b; 22 return Content(c.ToString()); 23 } 24 } 25 }
至于Log4net ,我想有空再把具体写下来,记录记录。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 利用.net代码实现发送邮件 2020-02-17
- C#利用服务器实现客户端之间通信 2020-01-20
- 在线服务 2019-07-23
- Asp.Net MVC中记录错误日志保存到本地txt文件 2019-05-18
- 记录Ocelot + SignalR 多服务端测试 2019-04-29
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash