以下是个人对业务错误和系统异常的一点看法:
业务错误:其实就是一些操作上的错误,比如登陆时用户名或者密码错误,新建用户时账号已被注册等。这一类的错误应该尽可能地给用户给出准确的提示信息,后台日志不应该打印出错误堆栈信息。
系统异常:包括系统挂了,服务间调用失败,数据库异常,内存溢出等等,这类错误信息可以给用户提示“系统异常,请联系管理员”等类似的提示,不需要具体提示,因为用户不会关心究竟是服务异常还是数据库异常。但此时后台日志应该记录详细的错误堆栈信息,以便于运维或者开发人员定位问题。
看过很多开源和自己公司的代码,很多人都喜欢把业务异常自定义成各种Exception抛出来,并打印出详细的堆栈信息,这些人到底有没有考虑过运维人员的感受?拿到的日志中到处都是Exception,究竟哪些是需要关心的异常,这需要花很长时间去区分。
综上所述,我的建议是编码时注意区分真正的异常和业务错误,不要把业务上的错误当成异常抛出去,从而导致系统日志内容很混乱。