• 二.异常日志


    异常处理

    1.Java类库中定义的一类RuntimeException可以通过预先检查进行规避,不应该通过catch来处理比如数组下表越界,空指针

    2.异常不要用来做流程控制,条件控制,因为异常处理的效率比条件分支低

    3.try-catch操作包裹的代码应尽可能的排除稳定代码

    4.finally对象必须对资源对象,流对象进行关闭,在JDK7以上使用try-with-resources方式

    1. public class TryWithResource {
    2. public static void main(String[] args) {
    3. try (BufferedInputStream bin = new BufferedInputStream(new FileInputStream(new File("test.txt")));
    4. BufferedOutputStream bout = new BufferedOutputStream(new FileOutputStream(new File("out.txt")))) {
    5. int b;
    6. while ((b = bin.read()) != -1) {
    7. bout.write(b);
    8. }
    9. }
    10. catch (IOException e) {
    11. e.printStackTrace();
    12. }
    13. }
    14. }

    5.不能在finally块中使用return,finally块中的return返回后方法执行结束,不会再执行try块中的return语句

    6.捕获异常与抛出异常必须完全匹配,或者捕获异常是抛异常的父类

    7.方法的返回值可以为NULL,不强制返回空集合,空对象等,必须注释充分说明什么情况下会返回null值,调用方需要进行null判断防止空指针问题

    8.空指针产生的可能场景:

    • 返回类型为基本数据类型,return的时候是包装类型对象,自动拆卸有可能产生NPE
    • 数据库的查询结果可能为null
    • 集合里的元素即使不为null,取出的数据元素也可能为null
    • 远程调用返回对象,一律要求进行空指针判断
    • 对于Session中获取的数据,需要进行检查
    • 级联调用的情况下,容易产生NPE,例如obj.getA().getB()

    9.定义时区的时候区分uncheck与check异常,避免直接抛出运行时异常

    10.对于公司外的http/api开放接口应使用错误码,对于应用内部应抛出异常

    日志

    1.应用中不可直接使用日志系统中(log4j,logback)的API,而应该以来日志框架SLF4J中的API

    2.日志文件应至少保存15天,因为有些异常以周为频次发生

    3.在log4j.xml中设置additivity=false避免重复打印日志

    4.日志的级别详情如下:

    5.日志的打印应该使用占位符而不是使用+拼接字符串

    6.关于异常的信息应包含两部分:案发现场信息与异常堆栈信息

     

     

     

  • 相关阅读:
    【Java】异常处理(一)
    在IDEA中使用Git
    Grafana Loki查询加速:如何在不添加资源的前提下提升查询速度
    算法70-解析算式并返回结果
    物联网开发笔记(6)- 使用Wokwi仿真树莓派Pico实现按键操作
    django框架基于Python实现的作业查重系统
    java datetime数据类型去掉时分秒
    45 深度学习(九):transformer
    网络原理~初识
    CouchDB简单入门
  • 原文地址:https://blog.csdn.net/weixin_51211461/article/details/128116724