global中捕获异常

前言:由于现在日志非常重要,但是在哪里打写日志比较好呢,我选择的是在global中,把错误代码网上抛,而不是在底层写大量的try catch然后在catch中来写日志,每个catch中的写日志这样就会避免了很多重复代码。当然这是目前我们采取的一个方法,大家可以提出更好地方法来管理日志,下面我开始写代码

第一步:尽量抛弃项目中try catch。看下代码

private void ExceptionTestOne()
        {
                int a = 1;
                int b = 0;
                int c = a/b;
        }

上面代码会抛一个异常

第二步:如果项目中必须用try catch怎么办,因为有时候连接wcf的时候如果出现异常时候我们需要关闭连接避免堵塞,那么我们就采取抛异常的方法

private void ExceptionTestTwo()
        {
            try
            {
                List<Simple> simples = null;
                simples.Add(new Simple() { Name = "发生异常" });
            }
            catch (Exception ex)
            {
                throw new Exception("",ex);
            }
        }

第三步:我们新建一个global.asax 在Application_Error中把异常信息加入队列中 如下

 //创建一个静态的队列记录把异常都放在队列中
 private static Queue<Exception> queue = new Queue<Exception>();

 protected void Application_Error(object sender, EventArgs e)
         {
            Exception exp = Server.GetLastError();
            if (exp != null) {
                queue.Enqueue(exp);
            }

            Server.ClearError();
        }

第四步:异常信息加入日志(这里为了简单就写入txt文本中了)

protected void Application_Start(object sender, EventArgs e) {
            ThreadPool.QueueUserWorkItem(a => {
                while (true) {
                    try {
                        if (queue.Count > 0) {
                            Exception ex = queue.Dequeue();
                            WriteLog(ex);
                        }
                        else {
                            System.Threading.Thread.Sleep(TimeSpan.FromSeconds(3));
                        }
                    }
                    catch (Exception ex) {
                    WriteLog(ex);

} } }); }
    private void WriteLog(Exception ex)
        {
            if (!File.Exists(@"E:\C#系列\ExceptionDealWith\ExceptionDealWith\Log.txt")) {
                FileStream fs1 = new FileStream(@"E:\C#系列\ExceptionDealWith\ExceptionDealWith\Log.txt", FileMode.Create, FileAccess.Write);//创建写入文件
                StreamWriter sw = new StreamWriter(fs1);
                sw.WriteLine(ex.Message);//开始写入值
                sw.Close();
                fs1.Close();
            }
            else
            {
                StreamWriter sr = File.AppendText(@"E:\C#系列\ExceptionDealWith\ExceptionDealWith\Log.txt");
                sr.WriteLine(ex.Message);
                sr.Close();
            }
        }

当然接入错误信息你可以多定义几个比喻ip地址,堆栈信息错误等基本就是这么多了。这是基本思路。有日志了我就就可以根据时间,ip等进行查询日志日志信息

下载

时间: 2024-10-29 05:08:33

global中捕获异常的相关文章

ASP.NET Global中的方法

[ASP.NET 1.1]Global.asax.cs中的方法的含义  跟Request有关的放到后面一起说,先说其他的5个. Application_Init:在每一个HttpApplication实例初始化的时候执行. Application_Disposed:在每一个HttpApplication实例被销毁之前执行. Application_Error:所有没有处理的错误都会导致这个方法的执行. Application_Start:在程序初始化的时候执行.在Web应用程序的生命周期里就执行

oracle 游标循环中 捕获异常 继续执行

declare       --类型定义         cursor c_eventstate       is       Select  CampaignId,phonenumber,PolicyNumber from mkt_eventstate a where synstate =0 and packagestate = 2 and errorcode = 6;       --定义一个游标变量v_cinfo c_emp%ROWTYPE ,该类型为游标c_emp中的一行数据类型    

tp5中捕获异常的配置

首选在配置文件中加入配置如下 // 异常处理handle类 留空使用 \think\exception\Handle    'exception_handle'       => '\\app\\common\\exception\\Http',    'http_exception_template'    =>  [        // 定义404错误的重定向页面地址        404 =>  APP_PATH.'view/error/404.html',    ], 值得注意的

Global中的Timer计时器

protected void Application_Start(object sender, EventArgs e)//端口启动的事件        {            Hzjg.Common.Utility.Log.FilePath = Server.MapPath("~/") + "\\log"; // 在应用程序启动时运行的代码              System.Timers.Timer myTimer = new System.Timers.

node 进阶 | 通过node中如何捕获异常阐述express的特点

node如何捕获异常 node基于js的单线程,有了非阻塞异步回调的概念,但是在处理多个并发连接时,并发环境要求高,最重要的是单线程,单核CPU,一个进程crash则web服务都crash,但是为什么node还这么火?甚至有了Node工程师这个岗,肯定就是node有自己crash之前与之后的解决方法,比如捕获异常 问:nodejs如何捕获异常?答:回调函数中有err形参,console.log出来,这是我之前回答别人问题的答案,但是自从我这几天看了如何捕获异常,才知道捕获异常的精髓就是不要让服务

路径问题 Global文件中写入错误日志记录

“~”表示Web 应用程序根目录,“/”也是表示根目录,“../”表示当前目录的上一级目录,“./”表示当前目录 1  throw抛出异常     2 执行OnActionExecuted 方法   3执行 Global  中的 Application_Error 方法写入日志 global文件中写入  错误日志记录 protected void Application_Error(object sender,EventArgs e) { Exception lastError = Server

asp.net中当服务器出错时显示指定的错误页面

http://blog.csdn.net/helloxiaoyu/article/details/2943537 此篇文章描述了当异常再ASP.NET中发生时怎样使用C#.NET代码去拦截和相应异常.ASP.NET在异常处理方面比传统的ASP更优越.在ASP.NET中,允许在应用程序的各个层面中处理异常.ASP.NET的新特性ASP.NET为捕获并处理异常提供了更多的便利.在传统的ASP程序中,我们用“On Error Resume Next”(或Jscript的Try-catch)来处理异常.

Centos中samba精简安装与使用

samba的功能是非常强大的,但是CleverCode在实际的工作中发现,CleverCode使用的功能比较少.最主要的使用是将Linux机器中/home/CleverCode目录,在windows下能够访问.所以一般CleverCode只简单安装,然后将/home/CleverCode目录共享到windows的某个盘. 1 简介 Samba是一个能让Linux系统应用Microsoft网络通讯协议的软件,而SMB是Server Message Block的缩写,即为服务器消息块 ,SMB主要是

Node中的全局对象

global global顶级对象,类似于浏览器中的window 在任何地方可以直接使用,不需要导包 setTimeout/setImmediate/process.nextTick,异步的时候setTimeout的优先级高于setImmediate,process.nextTick优先级最高 setInterval 在REPL环境中定义的变量直接挂载到global中 在js文件中定义的变量不会挂载到global中 获取路径 __dirname 当前执行的js所在的文件夹 __filename