博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
global中捕获异常
阅读量:6627 次
发布时间:2019-06-25

本文共 2559 字,大约阅读时间需要 8 分钟。

  前言:由于现在日志非常重要,但是在哪里打写日志比较好呢,我选择的是在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
simples = null; simples.Add(new Simple() { Name = "发生异常" }); } catch (Exception ex) { throw new Exception("",ex); } }

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

//创建一个静态的队列记录把异常都放在队列中 private static Queue
queue = new Queue
(); 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等进行查询日志日志信息

转载于:https://www.cnblogs.com/LipeiNet/p/4865135.html

你可能感兴趣的文章
C++ Virtual 关键字
查看>>
兩個集合之間的全體部分函數可以形成一個集合
查看>>
subline 快捷键与功能解释
查看>>
关于informatica的Dynamic Lookup组件使用中遇到的一个问题的思考
查看>>
[转]模拟频率与数字频率
查看>>
转 Spring Security 简介
查看>>
DP ZOJ 3735 Josephina and RPG
查看>>
数位DP GYM 100827 E Hill Number
查看>>
有关SQLite的substr函数的笔记
查看>>
Kafka 配置参数汇总及相关说明
查看>>
Joel在耶鲁大学的演讲
查看>>
【C语言】类型限定词
查看>>
TypeScript 素描-变量声明
查看>>
AMF序列化为对象和AMF序列化为二进制字节流
查看>>
Python3 学习
查看>>
python之路day12--装饰器的进阶
查看>>
[LeetCode] Two Sum III - Data Structure Design
查看>>
课后作业-阅读任务-阅读笔记-4
查看>>
【转】ARC下dealloc过程及.cxx_destruct的探究
查看>>
NGUI的窗体的推动和调节大小(drag object和drag resize object)
查看>>