T31Day05异常处理和日志

一、Java异常机制

1.Java异常处理流程

2.Java异常处理机制

 3.Java异常体系

二、异常处理设计与实践

1.异常抛出与捕获的原则

        非必要不使用异常

        使用描述性消息抛出异常

        力所能及的异常一定要处理

        异常忽略要有理有据

2. 特殊NPE场景及其处理对策

①级联调用时容易产生NPM(NullPointException)

String name=university.getColleage().getClass().getName();

 如上述代码获取时没有进行判空操作直接调用后续方法,就很容易发生NPM。

对应操作1:

if(university!=null){
    Colleage colleage=university.getColleage();
    if(colleage!=null){
        Class class=colleage.getClass();
        if(class!=null){
            String name=class.getName();
        }
    }
}

可以看出上述代码拆开写的话十分长,及其不优雅

对应操作2:

String name=Optional.ofNullable(university)
                .map(uni-> uni.getColleage())
                .map(coll->coll.getClass())
                .map(cla ->cla.getName())
                .orElse("");

如此使用则可忽略判空操作,orElse则在中间出现Null值的情况下为name赋予的初始值。

3.特殊异常场景处理及其处理对策

foreach遍历集合的异常。

不要在foreach循环过程中操作循环对象的add/remove方法,foreach会判断初始对象数量和操作对象数量,如果不一样会报错。

三、日志规约

1.日志的功能

①监控告警:

        健康检查

        指标监控(告警)

②记录行为轨迹

        指标监控(查询)

        链路追踪

③快速定位问题

        日志

2.日志时效规约

当天日志命名:以“应用名.log” 来保存

过往日志命名:以{logname}.log.{保存日期}命名: 日期格式:yyyy-MM-dd

日志文件至少保存15天:便于排查某些以“周” 为频次发生的异常

敏感信息操作联机储存6个月:网络安全相关 法律的规定

3.日志记录规约

系统应依赖使用日志框架(slf4j,JCL)的api而不是具体日志库中的

在日志输出时,字符串变量之间的拼接使用占位符的方式

日志打印时禁止直接使用JSON工具将对象转换成String

尽量使用英文来描述日志错误信息

4.日志输出规约

日志级别开关判断:对于 trace/debug/info级别的日志输出,必须进行日志级别的开关判断

异常日志信息要完整:

        异常日志信息应该包括以下两类信息:

                案发现场信息

                异常堆栈信息

避免重复打印日志:重复打印日志,浪费磁盘空间,务必在日志配 置文件中设置 additivity=false

5.扩展日志的设计与规约

扩展日志单独存储: 应用中的扩展日志(如打点、临时监控、访问日志等)单独存储

错误日志单独存储:业务日志与错误日志分开存储 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值