最近在看深入理解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会显示我们的应用程序,如下图
在应用程序上右击,出现“Trace Application...”菜单,点击打开。出现以下界面:
在上面界面输入调试代码,如下:
@BTrace
public class TracingScript {
/* put your code here */
@OnMethod(
clazz="BTraceTest",
method="add",
[email protected](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在打印参数和结果。
如下图:
到此结束。
哈哈,以前线上出现问题只能改动代码加打印日志,再重启。收获一个强大的功能。