`
zean
  • 浏览: 18873 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

异常处理设计

阅读更多

前段时间设计了一个异常处理,效果还可以,但还不是很满意, 不知道别人的异常处理是个什么样子,贴出来跟大家讨论一下。先看类图:

 异常处理

 

1 在开发应用时会对模块信息先进行记录,包括:模块名、模块编码、模块描述、默认异常级别、Action类、Service类、DAO类和其它调用的类等等。

2 会对异常级别的处理方式以及要处理的包进行配置,这些信息由ApplicationConfig来解析并缓存。

<exception>
  <packages description="需要处理的包">
   <package>com.exp.test</package>
  </packages>
  <priority description="优先级和处理方式">
   <level name="LOWEST" value="1" mode="print,file,database" filePath="d://lowest_exception.log"></level>
   <level name="LOW" value="2" mode="database,file" filePath="d://low_exception.log"></level>
   <level name="NORMAL" value="3" mode="database"></level>
   <level name="HIGH" value="4" mode="database,mail" mailAddress="ahzean@163.com,test@163.com"></level>
   <level name="HIGHEST" value="5" mode="message" number="135******"></level>
  </priority>
 </exception>

 

3 模块信息会在第一次触发异常的时候进行缓存,并建立模块编码到模块信息、Action类到模块编码、Service类到模块编码、DAO类到模块编码的HashMap映射,这样异常触发类就可以根据className迅速查找的模块信息。

异常处理过程

1 出现异常->JaspExceptionHandler对异常堆进行分析找出异常触发类、关心的出错类并查找模块信息

2 调用LogWrapperService对异常信息进行包装,这个处理过程中也将ExceptionCode中列出的常见异常代码进行翻译,同时记录了用户的相关信息,如操作时间、用户名、客户端地址等等,最后LogWrapper中包装的信息包括提供给用户和提供给开发人员(包括异常触发类、程序执行过程出现的类、方法和行号,当然只列出配置包中的类,因为大部分异常信息涉及的类对我们来说没多大意义)两部分信息。

3 根据配置的异常处理级别调用相应的接口进行记录或提示,如写入日志文件、数据库、发邮件或短消息,最后弹出窗口提示错误信息(上面是显示给用户,下面显示给开发人员,默认隐藏)。

以上完全由程序自动捕获并处理,开发人员也可以干预处理过程,如设置异常级别和用户提示信息等。

分享到:
评论
6 楼 andy54321 2008-10-28  
设计很好;
前段时间自己也想过,比对之下,
想的太简单了,。。。。。
5 楼 zeelong2 2008-10-28  
LZ的设计还是不错的,呵。
4 楼 xiaoyu 2008-10-17  
没有扩展性, 应该可以扩展exception的处理。 我一般是类似J2EE的Web Filter的处理方式:

ExceptionHandler --> ExceptionProcessChain --> ExceptionProcessor

ExceptionProcessor实现类的为代码:
doProcess(Throwable e, ExceptionProcessChain chain) {
     //do xxxxxx.
    
     chain.doProcess(e); //调用下一个处理方法
}

ExceptionProcessor的实现类可以有日志, 通知, 不同的等级, 不同的类型异常等


ExceptionHandler 的实现类可以有aop, filter, 普通的代理等形式。 一个Handler会有一个Chain链(组合是可以随便配置的)
3 楼 zhoujj303030 2008-10-17  
学习,确实写得挺有思想的!
2 楼 bulargy 2008-10-17  
不错,最近正在设计异常处理,很有参考价值~~
1 楼 zzq230 2008-09-20  
log4j配合spring会很出色,很欣赏LZ的的设计

相关推荐

Global site tag (gtag.js) - Google Analytics