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

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

private void ExceptionTestOne()
{
int a = ;
int b = ;
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 > ) {
Exception ex = queue.Dequeue();
WriteLog(ex);
}
else {
System.Threading.Thread.Sleep(TimeSpan.FromSeconds());
}
}
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等进行查询日志日志信息

下载

global中捕获异常的更多相关文章

  1. Global中的事件执行顺序

    The Global.asax file, sometimes called the ASP.NET application file, provides a way to respond to ap ...

  2. tp5中捕获异常的配置

    首选在配置文件中加入配置如下 // 异常处理handle类 留空使用 \think\exception\Handle    'exception_handle'       => '\\app\ ...

  3. asp.net4.0在Global中的Application_Start 中直接或间接使用 HttpUtility.UrlEncode等出现异常Response is not available in this context的解决方法

    HttpUtility.HtmlEncode HttpUtility.HtmlDecode HttpUtility.UrlEncode HttpUtility.UrlDecode 也会出现此异常. 这 ...

  4. global中拦截404错误的实现方法

    1. void Application_Error(object sender, EventArgs e) { if(Context != null) { HttpContext ctx = Http ...

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

    node如何捕获异常 node基于js的单线程,有了非阻塞异步回调的概念,但是在处理多个并发连接时,并发环境要求高,最重要的是单线程,单核CPU,一个进程crash则web服务都crash,但是为什么 ...

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

    http://blog.csdn.net/helloxiaoyu/article/details/2943537 此篇文章描述了当异常再ASP.NET中发生时怎样使用C#.NET代码去拦截和相应异常. ...

  7. ASP.NET中处理异常的几种方式

    1.程序中使用try catch 对于预知会发生异常的代码段使用try catch主动捕获异常,适用于提示给用户或跳转到错误页面,或者通过其它方式处理异常(日志.通知等). int i = 10; i ...

  8. WebAPI中无法获取Session对象的解决办法

    在MVC的WebApi中默认是没有开启Session会话支持的.需要在Global中重写Init方法来指定会话需要支持的类型 public override void Init() { PostAut ...

  9. iOS 中block中使用了外部变量的分析

    例子1: ; void (^blk)(void) = ^(){ printf("in block %d[%p]\n", val, &val); //in block 10[ ...

随机推荐

  1. jmeter接口测试3-正则表达式提取器的使用

    正则表达式的用处很多,最基础的用法 1,断言 2,传参(关联) 例子 1.http请求 2正则表达式提取,想要提取列表列中id,一遍打开列表页 如果是1,每次就会取相同的值!匹配数字的权限高于模板$0 ...

  2. Linux下一种简单易行的cpu benchmark方法

    用Linux自带的bc计算器计算pi值的一种benchmark手段   其实很简单,就是一行命令. time echo “scale=5000; 4*a(1)” | bc -l -q time是计时程 ...

  3. Android攻城狮学习笔记—入门篇一

    第一章 搭建Android开发环境 1.1 环境组成 JDK(Java Development Kit) Eclipse Android SDK(Software Development Kit) A ...

  4. 数据库中间件mycat安装与使用

    1.下载 # wget http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz 2.安装 ...

  5. 理解Web应用程序的代码结构和运行原理(3)

    1.理解Web应用程序的运行原理和机制 Web应用程序是基于浏览器/服务器模式(也称B/S架构)的应用程序,它开发完成后,需要部署到Web服务器上才能正常运行,与用户交互的客户端是网页浏览器. 浏览器 ...

  6. Notes 20180505 : 计算机的基础知识

    总是想要去深入了解一下计算机,可真正去了解的时候才发现那并非一日之功,关于计算机的学习,并未放弃,但是化知识为笔记尚需时日,今日我们先简单了解一下计算机,然后开始Java语言的学习. 1 计算机的基础 ...

  7. UGA,PGA

    tom认为UGA不包含 sort工作区,所以下面的图都是错误的 The UGA is, in effect, your session’s state. It is memory that your ...

  8. Oracle 安全性一

    创建和管理数据库用户账户 用户账户属性 用户账户拥有很多在创建账户时定义的属性.这些属性将应用于连接到账户的会话,在会话运行期间,DBA或会话可以更改其中一些属性. 用户名 身份验证方法 默认表空间 ...

  9. 创建 个人 pod

    创建一个自己的 pod 大致需要以下步骤 创建git repository 编辑.podspec 创建LICENSE(许可证/授权)文件 标记 tag 验证 注册CocoaPods 发布 搜索验证 1 ...

  10. Kafka 部署指南-好久没有更新博客了

    最近到了一家新公司,很多全新技术栈要理解.每天都在看各类 English Offcial Document,我的宗旨是我既然看懂了,就写下来分享,这是第一篇. 基本需求: 1.已有 zookeeper ...