生产环境出现问题又没有打印日志如何分析错误

  最近在看深入理解Java虚拟机,里面讲解了如何通过VisualVM为线上程序打印日志。我们打开VisualVM,安装BTrace动态日志跟踪插件。以下是应用程序演示代码:产生两个1000以内的随机整数,输出这两个数字相加的结果。

public class BTraceTest {
    public int add(int a,int b){
        return a+b;
    }

    public static void main(String[] args) throws IOException {
        BTraceTest bt = new BTraceTest();
        BufferedReader reader = new BufferedReader(new InputStreamReader((System.in)));
        for(int i = 0; i < 10; i++){
            reader.readLine();
            int a = (int) Math.round(Math.random() * 1000);
            int b = (int) Math.round(Math.random() * 1000);
            System.out.println(bt.add(a,b));
        }
    }
}

启动程序后,VisualVM会显示我们的应用程序,如下图

生产环境出现问题又没有打印日志如何分析错误_第1张图片

在应用程序上右击,出现“Trace Application...”菜单,点击打开。出现以下界面:

生产环境出现问题又没有打印日志如何分析错误_第2张图片

在上面界面输入调试代码,如下:

@BTrace
public class TracingScript {
	/* put your code here */
    @OnMethod(
    clazz="BTraceTest",
    method="add",
    location=@Location(Kind.RETURN) 
    )
    
    public static void func(@Self BTraceTest instance,int a,int b,@Return int result){
        println("调用堆栈");
        jstack();
        println(strcat("方法参数A:",str(a)));
        println(strcat("方法参数B:",str(b)));
        println(strcat("方法结果:",str(result)));
    }
}

点击start按钮,在Output面板中出现BTrace up&running代表启动成功。

此时,回到我们的应用程序,在控制台输入内容,在VisualVM的Outpt在打印参数和结果。

如下图:

生产环境出现问题又没有打印日志如何分析错误_第3张图片

到此结束。

哈哈,以前线上出现问题只能改动代码加打印日志,再重启。收获一个强大的功能。

你可能感兴趣的:(项目demo)