异常
异常应当描述导致当前异常发生的原因;
根据异常栈快速定位到异常发生的位置;
结合异常描述和异常栈解决异常。
Java异常处理流程
Java异常处理机制
Java异常体系
try-catch-finally
try with resource
所有代码都放到catch块中,不好排查异常发生在哪个代码中。
可能抛同一个异常,可以放到同一个catch块中。
Optional优雅防止NPE
级联调用时易产生NPE(空指针异常)
foreach遍历集合的异常
1、不要在foreach循环里进行元素的remove/ add操作
(本质是iterator,在期望的被修改次数和实际被修改次数不一致时,抛出异常)
2、foreach循环会自动跳过遍历空集合,如果对于有null值的集合,碰到nulI时需注意NPE
日志
日志时效规约
1、当天日志命名:“应用名.log”
2、过往日志命名:“{logname}.log.{保存日期}”,日期格式:yyyy-MM-dd
3、日志文件至少保存15天,便于排查某些以“周”为频次发生的异常
4、敏感操作信息联机存储6个月,是网络安全相关法律的规定
日志记录规约
1、系统应依赖使用日志框架(SLF4J、JCL)的API,而不是具体日志库中的
2、在日志输出时,字符串变量之间的拼接使用占位符的方式
3、日志打印时禁止直接用JSON工具将对象转换为String
4、尽量使用英文描述日志错误信息
日志输出规约
1、日志级别开关判断:对于trace/debug/info级别的日志输出,必须进行日志级别的开关判断。
2、异常日志信息要完整:异常日志信息应包括案发现场信息和异常堆栈信息。
3、避免重复打印日志:重复打印日志浪费磁盘空间,务必在日志配置文件中设置additivity=false
扩展日志规约
1、扩展日志单独存储:如打点、临时监控、访问日志等单独存储。
2、错误日志单独存储:业务日志与错误日志分开存储。
错误码规约
1、定义时要有字母、数字
2、要分级分类管理
3、不能直接输出给用户作为提示信息使用
4、不用与业务架构或组织架构挂钩
5、使用者避免随意定义新的错误码
6、便于不同语言的开发者之间协作