zoukankan      html  css  js  c++  java
  • c#_错误处理_基础

    attribute:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using ServiceStack.Redis;
    namespace RedisMvcApp.Models
    {
        public class MyExecptionAttribute : HandleErrorAttribute
        {
            //public static Queue<Exception> ExceptionQueue = new Queue<Exception>();//创建队列.
            public static IRedisClientsManager clientManager = new PooledRedisClientManager(new string[]{"127.0.0.1:6379"});
            public static IRedisClient redisClent = clientManager.GetClient();
            public override void OnException(ExceptionContext filterContext)
            {
              //将异常信息入队.
                //ExceptionQueue.Enqueue(filterContext.Exception);//将异常信息入队.
                redisClent.EnqueueItemOnList("errorException", filterContext.Exception.ToString());//将异常信息存储到Redis队列中了。
                filterContext.HttpContext.Response.Redirect("/error.html");
                base.OnException(filterContext);
            }
        }
    }

    gobal

    using log4net;
    using RedisMvcApp.Models;
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading;
    using System.Web;
    using System.Web.Http;
    using System.Web.Mvc;
    using System.Web.Optimization;
    using System.Web.Routing;
    
    namespace RedisMvcApp
    {
        // 注意: 有关启用 IIS6 或 IIS7 经典模式的说明,
        // 请访问 http://go.microsoft.com/?LinkId=9394801
    
        public class MvcApplication : System.Web.HttpApplication
        {
            protected void Application_Start()
            {
                log4net.Config.XmlConfigurator.Configure();//获取Log4Net配置信息(配置信息定义在Web.config文件中)
                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(o =>
                {
                    while (true)
                    {
                        try
                        {
                          //  if (MyExecptionAttribute.ExceptionQueue.Count > 0)
                            if (MyExecptionAttribute.redisClent.GetListCount("errorException") > 0)
                            {
                              //  Exception  ex= MyExecptionAttribute.ExceptionQueue.Dequeue();//从队列中拿出数据
                                string errorMsg = MyExecptionAttribute.redisClent.DequeueItemFromList("errorException");//从Redis队列中取出异常数据
                                //if (ex != null)
                                if(!string.IsNullOrEmpty(errorMsg))
                                {
                                    //构建成一个完整的路径
                                  //  string fileName = filePath + DateTime.Now.ToString("yyyy-MM-dd").ToString() + ".txt";
                                    //string execptionMsg = ex.ToString();
                                 //   File.AppendAllText(fileName, errorMsg, Encoding.Default);//将异常写到文件中。
    
                                    ILog logger = LogManager.GetLogger("czbkError");
                                    logger.Error(errorMsg);//将异常信息写到Log4Net中.
    
                                }
                                else
                                {
                                    Thread.Sleep(30);
                                }
                            }
                            else
                            {
                                Thread.Sleep(30);//避免了CPU空转。
                            }
                        }
                        catch (Exception ex)
                        {
                            //MyExecptionAttribute.ExceptionQueue.Enqueue(ex);
                            MyExecptionAttribute.redisClent.EnqueueItemOnList("errorException", ex.ToString());
                        }
                    }
    
                }, filePath);
            }
        }
    }

    log放在 app_start里面 可以防止被访问

  • 相关阅读:
    Django用户认证系统(三)组与权限
    Django用户认证系统(二)Web请求中的认证
    Django用户认证系统(一)User对象
    Django QuerySet API文档
    带有Header的SOAP 请求
    环境的配置,就需要理解组件的原理和机制。
    Hotspot JVM的常用选项
    Java程序员必学的Hotspot JVM选项
    三大Java 虚拟机垃圾回收机制的比较(HotSpot, JRockit, IBM JVM)
    [原]使用Fiddler捕获java的网络通信数据
  • 原文地址:https://www.cnblogs.com/MarchThree/p/3889172.html
Copyright © 2011-2022 走看看