Java异常处理:如何避免重复打印异常

欢迎进入Java社区论坛,与200万技术人员互动交流 >>进入

我们已经看到了servlet和facade和WebServiceClient这三层,servlet负责处理web请求,并给予响应,它会调用Facade这一层,这层封装了多个业务调用,也许接下来还有更多的层去处理具体业务,到此为止,我们已经发现同一个异常被多次打印。检查日志文件,你就能看到满屏重复的异常。因此,异常只能被打印一次。在哪儿打异常最好呢?。原则就是自定义异常在抛出前打印一下,其他各层对自定义异常不作任何打印。甚至不用Catch.对于上面WebServiceClient.login,在这打印是对的,还可以加上自己的一些log信息,如log.fatal(“cannotlogintheXXXsystem”);至于在其他层,就不在需要打印,处理这个异常了。这样的异常处理没有什么技术含量,只是个异常处理原则,如果人人都遵循(看到自定义不处理,抛自定义异常前处理)这个原则,就能避免重复打印异常日志再考虑如何把友好的异常信息给终端用户呢,所谓友好,不能总是提示“系统错误,请稍后再试”,因为这样能让使用者对系统没有信心。好比领导交给你的任务,你没有完成,你总不能每次都说“这是我的问题,以后改正”吧。对异常进行稍微详细的说明,是必要的。另外,也不能总是把异常的stacktrace原封不动的现实给使用者,如java.io.IOExcepiton:Filecannotbefound.这样会被认为你的程序质量不够高。可以通过异常指定类型来在Web层解释并转化为友好的异常。如上列子,可以如下定义MyApplicationExceptoinpublicclassMyApplicationExcepionextendsException{publicMyApplicationExcepion(interrorCode,Excetpionex,Object…para){…}}errorCode指示了异常代码,如Web_Service_CanNot_Connect,Duplicate_Export_Error等等,Web层的Servlet可以通过分析errorCode来同一决定来决定输出何种友好信息。如下代码:

    publicvoiddoPost(HttpServletrequest,HttpServletResponseresponse){ try{ StringuserId=request.getParameter(“userId”); UserDataManagermanager=newUserDataManager(); manager.exportToSCRT(userId); }catch(MyApplicationExceptionex{ intcode=ex.getErrorCode(); Stringmsg=null; switch(code){ caseWeb_Service_CanNot_Connect:{msg=”无法登录XXX系统,请联系管理员”;break;} caseDuplicate_Export_Error:{{msg=”重复数据倒入”;break;}} default:msg=”系统错误,请稍后再试” } …… } }

[1][2]

我喜欢出发。凡是到达了的地方,

Java异常处理:如何避免重复打印异常

相关文章:

你感兴趣的文章:

标签云: