查看日志小技巧

前言

做测试,如果不会看日志,那估计真的是很out了,因为你看到的永远是表象,

估计有人说,不就是tail这个命令么?是的,问题是,一长串日志内容,可能好几屏,你能看懂问题在哪么?

或者说,调用栈那么长,你能在日志中找到抛出异常的准确位置么?这些信息对开发来说才是有用的,这也是bug质量,

如果你的日志截图毫无相关或者说对开发毫无帮助,估计开发又得自己去看日志,或者大吼一声:嘿,老铁,再点一波,我看下日志。。。

脾气好的测试,会老老实实配合再点一次,但是,这不浪费时间么?

脾气不好的测试,点你妹啊,你自己不会看啊?发泄完后,问题不解决,测试没法进行啊,依然乖乖的配合点一下了。

(如果你说没你们公司测试看日志权限,那我也不知道该说啥了)

举例

真实项目,调用链很长,日志也很多,这里只简单模拟介绍代码问题的日志

下面代码,main调A中方法、A调B中方法、B调C中方法,C中方法会往外抛异常,B捕获到异常后,对异常进行了转换,然后继续往外抛

package com.qzcsbj;

/**
 * @create : 2020/12/13 22:54
 * @description : <描述>
 * @作者微信: ren168632201
 */
public class TestException {
    public static void main(String[] args) throws ByZeroArithmeticException {
        System.out.println("Here is TestException.main");
        TestA a = new TestA();
        a.a();
    }
}

class TestA {
    public void a() throws ByZeroArithmeticException {
        System.out.println("Here is TestA.a");
        TestB b = new TestB();
        b.b();
    }
}

class TestB {
    public void b() throws ByZeroArithmeticException {
        System.out.println("Here is TestB.b");
        TestC c = new TestC();
        try {
            c.c();
        } catch (ArithmeticException e) {
            // 转换为自定义的异常;也是为了不把原始异常信息抛到外面
            throw new ByZeroArithmeticException("除数不能为0哦", e);
        }
    }
}

class TestC {
    public void c() throws ArithmeticException {
        System.out.println("Here is TestC.c");
        System.out.println(5/0);
    }
}

// 自定义异常类
class ByZeroArithmeticException extends Exception {
    public ByZeroArithmeticException() {
    }

    public ByZeroArithmeticException(String message) {
        super(message);
    }

    public ByZeroArithmeticException(String message, Throwable cause) {
        super(message, cause);
    }

    public ByZeroArithmeticException(Throwable cause) {
        super(cause);
    }

    public ByZeroArithmeticException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
        super(message, cause, enableSuppression, writableStackTrace);
    }
}

 

结果

这种情况,从Caused by开始找到第一行本公司包名的代码。所以,问题就是在上图箭头指向的代码行。

有人说,我们的日志里面没有Caused by,比如下面这种情况 

package com.qzcsbj;

/**
 * @create : 2020/12/13 22:59
 * @description : <描述>
 * @作者微信: ren168632201
 */
public class TestException {
    public static void main(String[] args) throws ArithmeticException {
        System.out.println("Here is TestException.main");
        TestA a = new TestA();
        a.a();
    }
}

class TestA {
    public void a() throws ArithmeticException {
        System.out.println("Here is TestA.a");
        TestB b = new TestB();
        b.b();
    }
}

class TestB {
    public void b() throws ArithmeticException {
        System.out.println("Here is TestB.b");
        TestC c = new TestC();
        c.c();

    }
}

class TestC {
    public void c() throws ArithmeticException {
        System.out.println("Here is TestC.c");
        System.out.println(5/0);
    }
}

  

结果

这种情况,没有Caused by就从头开始找到第一行本公司包名的代码。所以,问题就是在上图箭头指向的代码行。

最后,你就可以有目的的截图作为bug的附件了,这样也提高了bug质量,如果开发再说让你帮忙点一下,你就直接说:请认真看日志截图!!!如果你有代码能力,也可以进一步截图有问题的代码。

原文地址:https://www.cnblogs.com/uncleyong/p/14053130.html