1.异常
「这是我参与11月更文挑战的第2天,活动详情查看:2021最后一次更文挑战」
什么是异常?
程序在运行时,发生了意料之外的事情,阻止了程序的正常执行,这种情况被称为异常。出现异常后,往往需要人工介入处理,否则会扩大异常的影响面。通常处理异常时,需要解决以下3个问题:
1. 哪里发生异常?
2. 谁来处理异常?
3. 如何处理异常?
Java异常的分类
JDK中有一套完整的异常机制,所有异常都是Throwable的之类,分为Error(致命异常)和 Exception(非致命异常)。
Error是一种非常特殊的异常类型,他的出现标识着系统发生了不可控的错误,如:StackOverflowError、OutOfMemoryError,程序无法处理,只能人工介入处理
Exception又分为ckecked异常(受检异常)和 uncheck异常(非受检异常),ckecked异常是需要带代码中显示处理,否则编译会报错。uncheck异常是运行时异常,他们都继承RuntimeException,不需要程序进行显示的捕捉和处理。
Java异常处理流程
异常抛出与捕获的原则
- 非必要不使用异常
- 使用描述性消息抛出异常
- 力所能及的异常一定要处理
- 异常忽略要有理有据
try-catch流程解析
2. 日志
什么是日志?
记录操作行为及操作轨迹数据,可以数据化的分析用户偏好,有助于优化业务逻辑,为用户提供个性化服务。当系统线发生线上问题时,可以快速的定位问题,处理问题
日志记录规约
• 系统应依赖使用日志框架(SLF4J、JCL)的 API而不是具体日志库中的 • 在日志输出时,字符串变量之间的拼接使用占位符的方式 • 日志打印时禁止直接用 JSON 工具将对象转换成 String • 尽量用英文来描述日志错误信息
日志输出规约
日志输出规约
- 日志级别开关判断:对于trace/debug/info级别的日志输出,必须进行日志级别的开关判断
- 异常日志信息要完整:应包括一下两类信息:案发现场信息、异常堆栈信息
- 避免重复打印日志
扩展日志的设计与规约
- 扩展日志单独存储:应用中的扩展日志(如打点、临时监控、访问日志等)应单独存储
- 错误日志单独存储:业务日志与错误日志分开存储
错误码规约
- 定义时要有字母也要有数字
- 要分级分类管理
- 不能直接输出给用户作为提示信息使用
- 不要与业务架构或者组织架构挂钩
- 使用者避免随意定义新的错误码
- 便于不同语言的开发者之间协作