【发布时间】:2009-03-31 04:39:24
【问题描述】:
在生产/QA/Dev 的每一次中断中,找出异常的根源是非常关键且耗时的过程。
由于Web应用程序处于多用户环境和无状态\异步(HTTP)中,查看Eventviewer / log文件和最终用户报告的问题的根本原因确实是一项艰巨的工作;此外,它还取决于最终用户对问题进行详细解释的程度。
我想出了一种创造性的方式来记录异常。哪一项让最终用户和开发团队的工作更轻松?
我们将按照签名将异常记录到 XML 文件中,并且可以远程处理以查看或报告异常
Error logging类中Static方法的签名如下
WriteLog(唯一编号、模块名称、优先级、层、字符串自定义消息、堆栈跟踪异常);
我知道有许多可重用的异常处理库,但我看到的是一个唯一编号,用于跟踪应该显示给最终用户的问题
回复用户:
如果期望处理和消耗异常,则开发人员应向最终用户显示有效的用户友好消息。如果向应用程序层(全局 .asax)抛出任何意外或异常,则响应将被清除,并且 HTML 中的自定义消息将被写回具有唯一 ID 的用户,如下所示
“ 发生意外错误,已记录异常以供进一步操作;请使用#生成的唯一编号与支持团队沟通“
参数详情:
唯一编号:这是为每个异常生成的唯一编号,ErrorLogging 类中的只读(获取)属性,每个异常都是唯一的,这将是 Hour+Minutes+Seconds+Milliseconds 的串联;最初我想使用 GUID,但最终用户很难记住 GUID 来报告问题。
公共字符串 strExceptionID {
Get {
return DateTime.Now.ToString(“HHmmssfff”);
}
}
模块名称:这将是一个带有模块名称的静态枚举变量 前任 : 枚举模块名称 {
Module1,
Module2,
Module3 };
优先级:这将是一个具有 Priority 的静态枚举变量,开发人员必须确定优先级,例如它是否是 Date 或整数格式的验证失败使用“Low”,或者如果它在业务层调用中出现意外则使用“2” .
我认为,如果与 SAP 或 Ariba 的接口出现故障,则应仅在 DAL 或业务逻辑层等中使用 Priority High。 例如:枚举优先级 {
High =1,
Medium =2,
Low =3, };
层:
这将是一个带有层的静态枚举变量 例如:枚举层 {
Presentation,
Business,
DataAccess
};
字符串自定义消息:
这是可选参数,由开发人员提供信息以帮助解释原因或可以传递空字符串。
带有堆栈跟踪的异常:这将是在方法内部进一步处理的异常对象。
错误日志方法内部完成的处理:
该方法还将获取登录的用户 ID 和时间戳并将其写入 XML 文件。
优点:
-> XML Logging 将使我们能够以任何方式处理使用它 -> 可以在浏览器中远程查看异常。 -> 易于追踪和发现任何异常。 -> 我们可以根据 Module, Priority , Time Stamp , UserID...等搜索、排序异常 -> 我们可以生成报告@ Module level , Layer wise , Priority , Time...
缺点: 对 XML 文件的依赖,如果它丢失了所有的异常就会被折腾,我们可以通过两种方式克服这个问题;及时将 xml 写入数据库,或者将其写入事件查看器日志记录之上,因为我们将始终拥有备份。
根据评论 cmets,我将发布 XML Schema 和 ASPX 页面以查看和搜索错误。
请花点时间查看并提供反馈。
【问题讨论】:
标签: logging exception-handling