摘要:一調用棧調用鏈監控僅僅獲取調用順序是不夠的,如前所描述左邊只體現了順序,右邊體現了順序和調用棧信息。二獲取調用棧在中獲取調用棧的方法如下代碼示例輸出結果可以看到第個棧是調用的方法。
一、調用棧
調用鏈監控僅僅獲取調用順序是不夠的,如前所描述:
左邊只體現了順序,右邊體現了順序和調用棧信息。
在Java中獲取調用棧的方法如下:
Thread.currentThread().getStackTrace()
代碼示例:
public class Man { public static void main(String[] args) { Man man = new Man(); man.getup(); man.brushTeeth(); man.eat(); } public void getup() { System.out.println("getup"); } public void brushTeeth() { System.out.println("brush teeth"); } public void eat() { StackTraceElement[] elements = Thread.currentThread().getStackTrace(); for (int i = 0; i < elements.length; i++) { StringBuffer buffer = new StringBuffer(); buffer.append("index: ").append(i).append(" ClassName: ").append(elements[i].getClassName()) .append(" Method Name : " + elements[i].getMethodName()); System.out.println(buffer.toString()); } System.out.println("eat"); } }
輸出結果:
getup brush teeth index: 0 ClassName: java.lang.Thread Method Name : getStackTrace index: 1 ClassName: com.javashizhan.demo.Man Method Name : eat index: 2 ClassName: com.javashizhan.demo.Man Method Name : main eat
可以看到第3個棧是調用eat的方法。
三、注意事項在實際代碼中需要注意:
并不一定是第3個棧就是當前方法的父方法,如在spring中調用還會有其他父方法,這個數字大于3。
一次調用過程中有的方法可能被循環調用導致有多個同名方法,因此通過類名和方法名并不一定就能準確找到對應的父方法,應查找調用鏈上最近的一個同名方法。
end.
微信公眾號:
加入《Java棧實戰營》知識星球,參與討論,更多實戰代碼分享!
https://t.zsxq.com/RNzfi2j
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/75865.html
摘要:微服務中調用棧的獲取,使用的開發者會很自然想到用來攔截,但是攔截同一個類的多個方法之間的調用很不方便,有侵入性,因此并不適合。調用棧的跟蹤也提供了這個能力,可以獲得當前方法的調用棧信息。 一、調用鏈跟蹤的作用 調用鏈跟蹤包括 1.前端到后端的調用鏈 2.單個服務內部方法之間的調用鏈 3.微服務之間的調用鏈 4.應用服務和數據庫之間的調用鏈 5.應用服務和第三方服務中...
摘要:一監控一般思路中監控一般通過代理模式實現,如下右邊是接口類。配置將項目下文件放到目錄下或者中,找到將類名修改為你自己的實現類,并去掉其他所有配置都不用修改就可以監控到。至此,可以監控到語句了。 一、SQL監控一般思路 Java中SQL監控一般通過代理模式實現,如下: showImg(https://segmentfault.com/img/bVbvWML?w=2187&h=1090)...
摘要:除了以上級別的成員變量共享,在調用鏈跟蹤時要能識別不同分層下的多個類實例的調用是同一個請求,而這個請求的調用都在一個獨立線程內完成,此時就要用到線程級變量共享。 一、Java類成員作用域 JAVA類成員作用域參考下圖: showImg(https://segmentfault.com/img/bVbvWlh?w=1695&h=925); Java虛擬機級作用域,通過在類成員變量前加...
摘要:但能拷貝圖粘貼后不失真通常是收費富文本編輯器才具備的能力。是否支持編程語言高亮,例如按,語言高亮是否支持數學公式等等因此選擇了兩款富文本編輯器,支持截屏粘貼,當做跟蹤系統時這個功能特別有用。 一、Web應用技術棧 在開發Web應用時,通常會使用到以下技術棧: showImg(https://segmentfault.com/img/bVbwceG);對應這些技術棧都已有相應的開源產品...
摘要:一網上關于的介紹很多,請找度娘和谷兄。唯一提的一點是字節碼注入比較好用的是,封裝度很高,使用簡單。二代碼樣例以下為關鍵代碼樣例,可以依樣畫瓢自行改造。加入棧實戰營知識星球,參與討論,更多實戰代碼分享,不就是幾斤蘋果,幾個榮耀道具的事嗎 一、Javaagent 網上關于Javaagent的介紹很多,請找度娘和谷兄。唯一提的一點是字節碼注入比較好用的是bytebuddy,封裝度很高,使用簡...
閱讀 3873·2021-09-23 11:51
閱讀 3064·2021-09-22 15:59
閱讀 862·2021-09-09 11:37
閱讀 2068·2021-09-08 09:45
閱讀 1266·2019-08-30 15:54
閱讀 2060·2019-08-30 15:53
閱讀 491·2019-08-29 12:12
閱讀 3286·2019-08-29 11:15