- 浏览: 236868 次
- 性别:
- 来自: 葡萄牙
文章分类
最新评论
-
lightbulb:
...
jQuery中的动画与效果 -
kendezhu:
opportunity 写道 谢谢kendezhu分享,今天正 ...
jQuery 获取和设置select下拉框的值 -
opportunity:
谢谢kendezhu分享,今天正好用上了!
jQuery 获取和设置select下拉框的值
关于异常的处理想必大家都了解try{}catch(){}finally{},这里就不再讲了。通过在VS里的"调试"-"异常",在弹出的异常对话框里的Common Language Runtime Exceptions栏里是.NET中的异常层次结构。
自定义异常:
如果系统提供的异常类已经不能够满足应用系统开发的需要,或者开发团队需要一套自定义异常处理机制,可以创建自定义的异常类。自定义异常类应该直接过间接地继承自ApplicationException类,并且其最好有良好的命名:错误的描述性名称+Exception,应该定义3个构造函数:默认构造函数,接受错误消息的构造函数,接受错误消息和内部异常对象的构造函数。CLR抛出的异常都继承自SystemException,应用程序抛出的异常应当继承自ApplicationException。这样一来,开发人员就能够编写catch块来捕获所有CLR抛出的异常或所有应用程序抛出的异常。
记录异常:
Web应用程序的用户可能成千上万,有时除了向用户显示错误信息外可能还需要将异常记录下来,比如web服务器负载过重,一些问题间歇性地多次出现等。.NET框架提供了多种记日志工具,比如可以在错误产生时发送E-mail,添加到数据库记录或读写文件中。一个较好的处理方式是使用windows事件,windows事件程序是windows系统内置的用于记录系统或应用程序日志的一个工具,可以被任何应用程序使用。
在控制面板里的管理工具里打开事件查看器来查看windows事件日志。一般事件分类有应用程序(用于记录任何应用程序的错误或通知,通常可以在这里记录ASP.NET应用程序异常)系统(用于记录跟操作系统相关的事件)安全(用于记录安全相关的问题,仅由操作系统使用)。在这些事件分类里单击某个事件将弹出该事件的详细信息窗口。右击这些事件分类后可以清除日志,另存日志,新建日志查看,从文件打开,通过属性可以设置日志文件的大小上限等。如果日志大小超过指定上限,则自动清除过期的事件日志。
将异常写入windows事件日志
System.Diagnostics命名空间下的EventLog类可以读写事件日志
protected void Button1_Click(object sender, EventArgs e)
{
try
{
int a = 1; int b = 0;
int c = a / b;
}
catch (Exception ex)
{
Label1.Text = "<b>错误消息:</b>"+ ex.Message + "<br/>"; 错误的描述信息
Label1.Text += "<b>错误源:</b>" + ex.Source + "<br/>"; 返回哪个程序集出错了
Label1.Text += "<b>堆栈追踪:</b>" + ex.StackTrace;
Label1.ForeColor = System.Drawing.Color.Red;
判断windows事件日志里有没有该类事件,我们可以在事件日志看到每个事件都有一个事件ID,事件ID相同的事件就属于同一类事件
if (!EventLog.SourceExists("除法运算错误"))
{
如果不存在该类事件就注册该类事件,并且将该类事件注册在我们自定义的事件分类里,第二个参数默认为应用程序
EventLog.CreateEventSource("除法运算错误", "ASPNET事件日志");
}
EventLog类的构造函数可以打开指定的事件分类(相当于某个表)
EventLog elog = new EventLog("ASPNET事件日志");
指定事件来源字符串,该字符串将出现在事件分类的来源栏(相当于来源字段)里
elog.Source = "来自web服务器";
将一个事件项写入指定事件分类里,这里指定了事件描述,事件类型,还可以指定事件ID等(相当于一条记录)
elog.WriteEntry(ex.Message, EventLogEntryType.Error);
}
}
可以看出windows事件日志就像一个数据库,事件分类就是不同的表,里面的事件项就是记录
编程查看事件日志(相当于查看数据库中某个表的所有记录)
复杂的,指定了显示的字段
首先创建一个事件项实体类
public class EventItem
{
public string EventType{get;set;} 事件类型
public string EventMessage{get;set;} 事件描述
public DateTime EventTime{get;set;} 事件发生时间
public string EventSource{get;set;} 事件来源
public EventItem(string eventtype,string eventmessage,DateTime eventtime,string eventsource)
{
EventType = eventtype;
EventMessage = eventmessage;
EventTime = eventtime;
EventSource = eventsource;
}
}
然后创建一个列表类用于保存某个事件分类里的所有事件项
public class EventList : List<EventItem>
{
public EventList(string logname)
{
if (!EventLog.Exists(logname)) 判断是否有该事件分类(是否有该表)
{
return;
}
else
{
EventLog elog = new EventLog(logname); 打开某事件分类
foreach (EventLogEntry item in elog.Entries) 事件项是EventLogEntry类型,Entries属性可获取该事件分类里的所有事件项
{
EventItem eventitem = new EventItem(item.EntryType.ToString(), item.Message, item.TimeGenerated, item.Source);
this.Add(eventitem);
}
}
}
}
protected void Button1_Click(object sender, EventArgs e)
{
string logname = TextBox1.Text;
EventList eventlist = new EventList(logname);
GridView1.DataSource = eventlist;
}
简单的,获取的事件项包含默认字段
protected void Button1_Click(object sender, EventArgs e)
{
string logname = TextBox1.Text;
EventLog elog = new EventLog(logname);
GridView1.DataSource = elog.Entries; Entries属性返回集合类型是EntryCollection,其继承了IEnumerable,可以绑定
GridView1.DataBind();
}
利用log4net来记录日志
http://blog.csdn.net/zhoufoxcn/archive/2010/11/23/6029021.aspx|推荐
http://www.cnblogs.com/dragon/archive/2005/03/24/124254.aspx|推荐
http://www.cnblogs.com/xugang/archive/2008/04/09/1145384.html
http://blog.csdn.net/zhoufoxcn/archive/2008/03/26/2220533.aspx
http://blog.csdn.net/antyi/archive/2007/04/30/1592812.aspx
下面配置的是每天都产生一个txt日志文件的方式,其他方式在第一个链接里都有描述,第二个链接理论讲的很好
<log4net>
<root>
<appender-ref ref="RollingLogFileAppender_DateFormat" />
</root>
<appender name="RollingLogFileAppender_DateFormat" type="log4net.Appender.RollingFileAppender">
<file value="Log/Dailylog.txt" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value="yyyyMMdd" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="日期[%date]线程ID[%thread]文件名[%file]行号[%line]%-5当前优先级别[%level]错误描述[%message]" />
</layout>
</appender>
</log4net>
页面追踪
尽管ASP.NET的错误页面提供了非常有用的信息,但是有时候开发人员需要更详细的信息来修正应用程序中的错误。比如应用程序执行一个属性或者是追踪应用程序中的逻辑错误。有时候应用程序可能产生了一些无效的数据,但是并没有明显的异常触发。ASP.NET提供了追踪功能,让开发人员使用一种更方便和有弹性的方式来报告诊断信息。
在页面级别启用除了可以在<%@ Page Trace="true"%>设置外,还可以在代码中设置,如:
protected void Page_Load(object sender,EventArgs e)
{Page.Trace.IsEnabled=true;}
Page对象的Trace属性是System.Web.TraceContext类的实例。使用代码的好处在于可以根据特定的环境来启用和禁止页面追踪功能。
这样运行后ASP.NET追踪提供了大量的诊断信息:
1.请求详细信息(SessionID,请求类型,请求时间,请求的状态码,请求编码,响应编码)
2.跟踪信息(追踪信息显示页面被发送到客户端之前页面的处理流程,并提供了页面执行的详细执行时长)
3.控件树(显示页面上所有runat=server的控件)
4.会话状态和应用程序状态(显示当前应用程序中所有会话状态Session的键,值,类型和所有应用程序状态Application的键,值,类型)
5.请求Cookie集合(web浏览器请求的Cookies的名,值,大小) 响应Cookie集合(web服务器发送的Cookies的名,值,大小)
6.标头集合(列出了所有HTTP头信息(是作为请求的一部分发送到web服务器的一小块信息,包括请求信息,支持的内容类型,使用的语言等))
7.响应标头集合(列出了作为响应发送到客户端的一部分信息)
8.窗体集合(post方式提交的表单信息) 但貌似8,9只是表单中服务器控件的值(ASP.NET页面追踪只追踪服务器控件?)
9.Querystring集合(get方式提交的表单信息/查询字符串中的名称和值)
10.服务器变量(通常不必看)
以上只是针对一个页面使用追踪,可以在根web.config中设置,对整个应用程序启动追踪,在<system.web>下配置:
<system.web>
<trace enabled="true" requestLimit="10" pageOutput="false" traceMode="SortByTime" localOnly="true"/>
</system.web>
requestLimit(最大数量的HTTP请求的追踪信息) traceMode(按什么方式排序) localOnly(追踪信息只显示在本地)
访问这些请求信息时只需访问根目录下的trace.axd(实际不存在)就可以了。
发表评论
-
ASP.NET报表技术
2011-08-01 00:39 2197水晶报表 我们先来看看在ASP.NET中使用水晶报表需 ... -
ASP.NET中的缓存技术
2011-02-21 22:54 1390http://www.cnblogs.com/ltp/arch ... -
ASP.NET状态管理
2010-12-13 16:10 1283开发WinFrom的程序员可能不会在意维护应用程序 ... -
关于aspx页面类继承于cs页面类
2010-10-19 17:01 4847cs页面类继承自System.Web.UI.Page类,一般和 ... -
使用数据库文件
2010-10-14 19:55 852以前很多项目都是连接的SQLServer数据库里的数据库 ... -
C#与Javascript中时间的格式化操作
2010-09-15 16:41 1569C#里时间格式化 一般的DateTime.Now.ToStr ... -
ASP.NET页面生命周期
2010-08-25 02:53 854http://www.cnblogs.com/KingStar ... -
获得漂亮的Flash|Javascript钟表代码
2010-08-24 16:06 1555http://www.clocklink.com ht ... -
ASP.NET登录控件延伸(个性化)
2010-08-24 03:06 1824既然由登录控件涉及到了Membership,那么就不得不 ... -
程序集(类库,java里也叫类库,对于NetBean位于其库里)与命名空间(相当于java里的包)
2010-08-23 21:23 1472http://book.51cto.com/art/20090 ... -
Temporary ASP.NET Files
2010-08-23 21:05 695http://book.51cto.com/art/20090 ... -
webapplication与website
2010-08-22 16:59 859http://blog.csdn.net/ups216/arc ... -
概念,依旧是概念……csproj文件是做什么用的?
2010-08-22 16:37 1422csproj是.net项目文件的后缀名,它是C Sharp P ... -
web application中使用Profile应该注意的问题
2010-08-22 14:04 627http://hi.baidu.com/windlhj/blo ... -
.Net 2.0 中的发送邮件实现C#代码
2010-08-19 16:15 1517http://hi.baidu.com/ganggang021 ... -
GridView 设置格式化 DataFormatString
2010-08-08 00:23 782http://www.cnblogs.com/emanlee/ ... -
利用 CSS Friendly Control Adapters 将 ASP.NET 控件转为符合WEB标准的、有语意的HTML页面 CSS 样式表控制。
2010-08-02 19:57 884http://www.cnblogs.com/wilsonwu ... -
App_data,App_code, bin,App_Browser,App_Themes,App_GlobalResources,App_LocalResou
2010-08-02 19:52 846http://blog.csdn.net/jjjjj10231 ... -
ASP.NET中的站点导航技术
2010-07-29 16:31 22061.站点地图 (站点地图文件) 是一个名为Web ... -
DropDownList1_SelectedIndexChanged不执行
2010-07-26 15:52 1055http://blog.sina.com.cn/s/blog_ ...
相关推荐
第7章 异常处理和日志追踪
第7章 异常处理和日志追踪.ppt 第8章 ASP.NET中的样式,主题和母版页.ppt 第9章 ASP.NET中的站点导航技术.ppt 第10章 用户控件和绘图.ppt 第11章 ASP.NET AJAX开发技术.ppt 第12章 Web部件技术.ppt 第13章 ADO.NET...
日志记录模块则负责记录系统中的各种操作和事件,以便在出现问题时进行追踪和分析。我们采用了Log4j日志框架,实现了对系统日志的统一管理。通过配置不同的日志级别和输出方式,可以满足不同场景下的日志需求。此外...
对于checked exception,我们通常使用try except可以显示解决,对于unchecked 异常,其实也是提供回调或者是钩子来帮助我们处理的,我们可以在钩子里面记录崩溃栈追踪或者发送崩溃数据. 下面代码可以实现python ...
C#查看堆栈通常是在异常处理中,出现异常之后通过异常的堆栈可以很方便的得到出现这个错误的代码调用路径。这个很有用,是否可以在没有异常出现时使用这种方法排查一些非异常错误呢?答案是肯定的。起因:论坛发帖子...
日志记录:详尽且有组织地记录日志,方便问题定位和追踪。 测试驱动开发:坚持单元测试、集成测试,保证代码质量。 持续集成/持续部署(CI/CD):构建自动化部署流水线,提高迭代效率。 容器化部署:利用Dock
您还将学习Microsoft .NET Compact Framework运行库生成的各种日志文件,了解如何使用它们对特定的错误进行诊断,了解如何将追踪消息输出到IDE,或将其写入部署后的应用程序活动日志中,这些为人们提供了诊断的工具...
阿里云第一届云原生编程挑战赛(分布式统计和过滤的链路追踪) 排名:116/4404 参照赛题方给的Demo思路做的一个extend版本,在正式赛的时候排名50左右,但在最终赛由于换了一组数据并且没有给出运行日志,没有找到错误...
├── 43 异常处理配置 ├── 44 请求拦截器配置 ├── 45 InnerAuth注解 ├── 46 Feign项目相关使用 ├── 47 服务监控介绍 ├── 48 服务监控使用 ├── 49 监控端点分类 ├── 40 整合Admin-Ui ├── ...
spaceTraders 玩太空商人去做核更好的异常处理创建一个常量过滤方法可以处理等于,不等于等-可能在元组中添加第三个元素。一般的跟踪总积分-或至少是权益,因此船上的货物价值也受到限制-出于好奇追踪船数建立测试...
环境需求nodejs> = 8.8.1 mongodb Redis特性签名验证,将不合法请求拒之门外 JWT授权验证,退出后令牌自动回收统一类别异常处理自动请求ID,方便请求追踪,支持前端预先调试简单可重用的请求参数校验器记录请求日志,...
说明: 与 NLS_TIME_TZ_FORMAT 相似, 其中的一对值指定 TIMESTAMP 数据类型的默认值, 该类型除存储 YEAR, MONTH 和 DAY 日期值, HOUR, MINUTE 和 SECOND 时间值, 还存储 TIMEZONE_HOUR 和 TIMEZONE_MINUTE。...
2.4.8 坏块的处理与恢复 97 第3章 参数及参数文件 103 3.1 初始化参数的分类 103 3.1.1 推导参数(Derived Parameters) 103 3.1.2 操作系统依赖参数 104 3.1.3 可变参数 104 3.1.4 初始化参数的获取 ...
3.7 内核事件追踪 175 3.8 Wow64 178 Wow64进程地址空间布局结构 179 系统调用 179 异常分发 179 用户回调 179 文件系统重定向 180 注册表的重定向和反射 180 I/O控制请求 181 16位安装器应用程序 182 打印 182 一些...
为什么日志说通过Apache(ra_dav)提交或导入的文件“(no author)”? 我偶然在Windows得到“Access Denied”错误,它们看起来随即出现。 在FreeBSD,某些操作(特别是svnadmin create)有时会挂起。 我可以在web...
为什么日志说通过Apache(ra_dav)提交或导入的文件“(no author)”? 我偶然在Windows得到“Access Denied”错误,它们看起来随即出现。 在FreeBSD,某些操作(特别是svnadmin create)有时会挂起。 我可以在web...
chapter8 异常处理 231 8.1 语法与继承架构 232 8.1.1 使用try、catch 232 8.1.2 异常继承架构 235 8.1.3 要抓还是要抛 238 8.1.4 认识堆栈追踪 241 8.1.5 关于assert 245 8.2 异常与资源管理 247 ...
利用委托机制处理.NET中的异常 与正则表达式相关的几个小工具 你真的了解.NET中的String吗? .NET中的方法及其调用(一) 如何判断ArrayList,Hashtable,SortedList 这类对象是否相等 帮助解决网页和JS文件中的中文...
10_socketclient动态库_日志功能集成 11_项目中检索内存泄漏使用和基本原理 12_动态库基本知识和环境调试注意 13_动态库内存释放问题 源码及文档 01_上一次课程回顾 02_链表热身_结构体中套元素和指针 03_结构体数据...
框架中包含了熔断器聚合监控、链路追踪监控,这里比较常规就不再赘述,唯一遇到的问题就是链路追踪时日志包重复引用的错误如下处理即可 <groupId>io.zipkin.java <artifactId>zipkin-server ${zipkin.version} ...