需求場景
1.在不影響生產環境的前提下,獲取指定日誌,分析bug原因等
工作流程
1,下載BTrace包至生產環境
下載相應包:https://github.com/btraceio/btrace/releases
獲取fastjson包 :https://repo1.maven.org/maven2/com/alibaba/fastjson/1.2.54/fastjson-1.2.54.jar //利於解析參數
2,編寫相應BTrace代碼
unsafe模式需要注意註解@BTrace(unsafe = true)
關於腳本擴展可參考:https://my.oschina.net/yaofull/blog/2967478
package com.sun.btrace.bin;
import com.sun.btrace.AnyType;
import com.sun.btrace.annotations.*;
import java.util.*;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializeConfig;
import com.alibaba.fastjson.serializer.SimpleDateFormatSerializer;
import static com.sun.btrace.BTraceUtils.*;
@BTrace(unsafe = true)
public class Test{
//監控某一個方法的輸入輸出
@OnMethod(clazz = "com.cetc.hubble.dataquality.controller.RuleController",method = "getAllRules",location=@Location(Kind.RETURN))
public static void printMethodRunTime(@Self Object self,String keyword,@Return AnyType result){
println( "keyword: " + keyword );
println("result: " +JSON.toJSONString(result));
}
}
3,修改BTrace腳本,配置環境變量
在bin目錄下btrace腳本開頭加入如下語句,注意修改爲正確的相應路徑
#Btrace解壓路徑
export BTRACE_HOME="/home/yao/Documents/btrace/btrace-bin-1.3.11.1"
#java環境變量已配置可不用
export JAVA_HOME="/usr/lib/jvm/java-1.8.0-openjdk-amd64"
最終如下圖所示:
4,獲得指定進程的id
ps -aux|grep java
5,執行Btrace腳本
#注意用戶與相應進程用戶一致
#fastjson.jar與腳本Test.java 放於bin目錄下
#unsafe模式才能使用fastjson 注意參數 -u
sudo -u root ./btrace -cp fastjson-1.2.54.jar -u 28589 Test.java > log
6,操作查看相應日誌
tail命令,如下:
參考文檔
https://github.com/btraceio/btrace