赛迪网 > IT技术 Java > (最新更新)Java基础
  IT资讯搜索
 
IT产品搜索
[程序开发][网管世界][网络安全][数据库技术]
[操作系统][嘉宾聊天·在线访谈][活动集锦]
[精彩专题][Symantec专区][订阅IT技术周刊]
[开发论坛][网管论坛][安全论坛][数据库论坛]
[操作系统论坛][Sybase专区][IBM dW技术专区]
[病毒求助][病毒与漏洞播报][文档·源码下载]

异常处理:和日志集成

发布时间:2006.03.15 18:11     来源:Matrix    作者:sharedata

      作者:sharedata
      来源:http://www.matrix.org.cn/blog/X-Brave/
      在软件实现中,异常和日志都是重要的质量保证手段,常常,我们总是需要在系统实现上同时提供异常和日志,并且总是在“距离”很近的地方实现的,下面是一段典型的使用异常和日志的代码:
    try{
         //do something here...
     }catch(Exception e){
         log.error(“Your business exception message…”);
         throw new BusinessException(“Your business exception message…”);
    }
      类似的代码我们经常遇到。虽然类似的代码都是简单的,但在现实中我们可以发现,一些时候粗心的程序员总是忽略或者忘记了两者都需要书写并且尽可能使用一致的异常消息。既然异常和日志总是同时出现的,那么我们就可以把两者集合起来。实际上在我看来,他们本来就是一家人。
    为了达到异常和日志的集合,我测试过2种做法:一种选择是在自定义异常类中提供支持;一种是异常消息拼凑时提供支持。我们也可以在其中提供额外的功能来保证系统的效能,包括“适度”缓冲的异常处理。但需要特别注意的是,这种处理所带来的“长过程”(也就是经过不止一个步骤才完成这些功能)开销,在缓冲异常信息可能带来的系统出错时异常丢失,以及在异常消息处理时可能出现错误需要提供额外的保护措施。
    更进一步的,我们应该注意到如下事实:
    首先,异常的层次结构是不同的。它包括了底层的LowlevelException(合称相关需要抛出异常的异常处理)和上层的异常使用者,细心的读者应该发现,上述的实例实际上属于LowlevelException。
    其次,我们也应该注意到异常包括客户定制的异常如BusinessException和Java自带的异常。这些异常的共存如何进行统一是我们需要面对的,但通常,我认为异常的客户定制包装是必要的,特别是多层结构下这个客户定制化就是让异常具有容易理解的信息。
    异常和日志的集合,是一种简单、实用的创新做法,在这种实现里面,你可以提高系统异常处理的一致性程度、你可以提供经过缓冲的日志输出的一致性做法,我们也注意到她的处理的灵活性,必要时,你可以关闭她。
    当然,无论如何,异常和日志的集合也好,分离也好,任何时候,人的因素才是最重要的,更一般的,我们可以发现,异常和日志要做的就是把系统特殊的或者重要的情况记录下来,这些记录信息应该具有明确的信息保证她是可读的、可定位的,实际上,这就是异常处理的全部。简单的说,“异常处理:实用就是好”(参考 http://www.matrix.org.cn/blog/X-Brave/《异常处理:实用就是好》)。


    实际上,为了提高性能和保证系统的正确性,我很想使用异步消息机制来完成这些功能,或者至少我需要保证系统在 集群 环境下的正确性,但我拒绝使用复杂的第三方技术来实现这些要求(性能和依赖考虑),也不优先考虑使用高端服务器所自带的或者外购的消息服务组件,我也缺乏对 集群 环境的实际经验,这些现实妨碍了我对更好的实现的尝试。
    但通过在系统中提供开关功能、对缓冲数据进行数目控制以及只在有限的几个或者一个地方提供具体实现,所以,对屏蔽该功能是容易的。当然,对至少两种实现的较高强度测试都是没有问题的。毕竟,真正的分布式的实现,特别是 集群 环境下的处理,并非如很多人宣称的那么容易实现。这种既满足了当前绝大部分需求(包括性能和可靠性)也充分考虑可能的影响并提供小开销解决方案的处理,我想,是足够了的。
    当然,我还是很想听到您对如何自己实现简单的可靠异步消息以及集群实现技术细节的看法。欢迎讨论,当然,更多的,希望您是老师的角色并给予指导。


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· 对java 提供的两个Map 进行了性能测试,并尝 (02-17) · 学习J2SE过程中的30个基本概念 (08-21)
· SWT代码研究(1) (08-02) · SWT代码研究(2) (09-26)
· 一个读取xml文件内容的类 (02-12) · 在java里面调用CUI程序的方法 (06-01)
· 架构简介 (04-18) · O"Reilly JAVA RMI-序列化-中文翻译版 (03-08)
· 源代码--java写小游戏,吞食蛇 (06-17) · Araneid 蜘蛛纸牌游戏源代码 (10-22)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  信息化 ·热点·专题·访谈·周刊·方案案例
· 中小企业发展缓慢 电子商务存在的问题多
· 马云追加20亿投资淘宝 图谋电子商务霸主
· 国产ITIL运维先行者 四大厂商角力BI市场
· 企业信息安全解决方案 方正电子公文系统
  IT博客 ·曾剑秋·项立刚·Java学习·网管
  IT技术论坛 ·开发·网管·安全·数据库·系统