《Java开发手册(泰山版)》之异常日志

    技术2022-07-14  59

    《Java开发手册(泰山版)》之异常日志

    1、异常处理2、日志规约

    1、异常处理

    1)NullPointerException,IndexOutOfBoundsException 等不应该通过catch 的方式来处理 正例:if (obj != null) {...}2)异常不要用来做流程控制,条件控制 (3)捕获异常是为了处理它,不要捕获了却什么都不处理而抛弃之,如果不想处理它,请将该异常抛给它的调用者。 最外层的业务使用者,必须处理异常,将其转化为用户可以理解的内容 (4)事务场景中,抛出异常被 catch 后,如果需要回滚,一定要注意手动回滚事务 (5finally 块必须对资源对象、流对象进行关闭,有异常也要做 try-catch6)不要在 finally 块中使用 return private int x = 0; public int checkReturn() { try { // x 等于 1,此处不返回 return ++x; } finally { // 返回的结果是 2 return ++x; } }7)防止 NPE,是程序员的基本修养---使用 JDK8 的 Optional 类来防止 NPE 问题 1) 返回类型为基本数据类型,return 包装数据类型的对象时,自动拆箱有可能产生 NPE 反例:public int f() { return Integer 对象}, 如果为 null,自动解箱抛 NPE 2) 数据库的查询结果可能为 null 3) 集合里的元素即使 isNotEmpty,取出的数据元素也可能为 null 4) 远程调用返回对象时,一律要求进行空指针判断,防止 NPE 5) 对于 Session 中获取的数据,建议进行 NPE 检查,避免空指针 6) 级联调用 obj.getA().getB().getC();一连串调用,易产生 NPE

    2、日志规约

    1)应用中不可直接使用日志系统(Log4j、Logback)中的 API 而应依赖使用日志框架(SLF4J、JCL--Jakarta Commons Logging)中的 API 使用 SLF4J: import org.slf4j.Logger; import org.slf4j.LoggerFactory; private static final Logger logger = LoggerFactory.getLogger(Test.class);2)以 mppserver 应用为例,日志保存在/home/admin/mppserver/logs/mppserver.log,历史日志 名称为 mppserver.log.2016-08-013)在日志输出时,字符串变量之间的拼接使用占位符的方式 logger.debug("Processing trade with id: {} and symbol: {}", id, symbol) (4) 对于 trace/debug/info 级别的日志输出,必须进行日志级别的开关判断 // 如果判断为真,那么可以输出 trace 和 debug 级别的日志 if (logger.isDebugEnabled()) { logger.debug("Current ID is: {} and name is: {}", id, getName()); }5)异常信息应该包括两类信息:案发现场信息和异常堆栈信息。如果不处理,那么通过关键字 throws 往上抛出 logger.error(各类参数或者对象 toString() + "_" + e.getMessage(), e);
    Processed: 0.014, SQL: 10