分层系统异常处理的原则(转)
可以按照以下几条原则去处理分层的异常,
- 在DAO层,产生的异常类型有很多,无法用细粒度的异常进行catch,可以使用 catch(Exception e)方式,并 throw new DAOException(e),不需要打印日志,因为异常在 Manager/Service 层一定需要捕获并打印到日志文件中去,同台服务器再打日志浪费性能和存储。DAO层的异常抛出并且不打印日志
- 在 Service 层出现异常时,必须记录出错日志到磁盘,尽可能带上参数信息, 相当于保护案发现场。Service层的异常继续抛出但需要打印日志(尽可能带上参数信息),保留案发现场
- Manager 层与 Service 同机部署,日志方式与 DAO 层处理一致,如果是单独部署,则采用与 Service 一致的处理方式。
- Web 层绝不应该继续往上抛异常,因为已经处于顶层,如果意识到这个异常将导致页面无法正常渲染,那么就应该直接跳转到友好错误页面, 尽量加上友好的错误提示信息。Web层的异常需要捕获并且把错误信息返回给前端,让前端跳转到合适的错误页面或者显示错误信息。不能再往外层抛了,因为抛无可抛
- 开放接口层(API)要将异常处理成错误码和错误信息方式返回。
综合而言就是DAO粒度太细就不记录了,Service层因为带有业务含义需要记录日志来排查问题,Web层则应该对错误给出自己的应对机制了。
