写在开始前---web异常处理

分层项目中,有上层调用下层,每一层均可能出错,好比数据库链接,文件读写等异常。除了运行时程序的异常,还有业务逻辑的一些问题。发生异常须要作必定处理,既要让开发人员便于排查问题,又要让用户看到友好又便于理解的信息。sql

对于底层链接数据库,操做数据库的数据层,异常捕捉后,能够记录日志,日志能够是当前文件,行号,sql语句,参数,错误的详情等。而后再往上层抛异常,在控制器层捕捉,判断后返回给用户客户端恰当的便于理解的错误信息。这个信息是根据业务模块功能具体来肯定的。好比用户模块的新增功能,当用户名重复的时候,能够提示‘用户名已存在’,比‘操做失败,请重试’要直观,固然这是业务逻辑的异常,程序异常也相似。数据库

一般能够自定义本身的异常类型,做为底层的异常抛到上层去。上层能够集中配置一个异常信息对照表,或错误码表,根据返回的异常,查找对应的用户提示信息,并返回。架构

常见的控制层代码段以下:日志

try{队列

   //model();开发

}catch(Exception e){io

  //print();配置

  //log('文件-行号-异常信息');sql语句

      //return '根据e的类型,返回用户友好的信息提示';model

}

每一个controller都有相似的代码,因此能够把这个处理逻辑搬到拦截器或者调度器里,而后根据异常类型或异常错误号,再对应集中返回信息。

至于log记录,则根据状况来分析,实际业务访问量,系统规模架构等都有很大影响。通常是记录在文件,队列,日志型数据库等。

 

层层抛出、上层捕捉、详情记录、友好返回、异常信息对照表