[英]How would you break down and log the execution times of different parts of your application?
我們已經構建了一個Web應用程序,該應用程序接受SOAP消息,進行一些處理,調出另一個Web服務,整理響應並將其發送回原始調用方。
我們想在一行中記錄這些不同步驟的不同執行時間。 我們在JBossWS堆棧中使用log4j。 換句話說,我們希望日志輸出看起來像:
2009-06-10T16:19:31.487 3336/2449/861
其中3336毫秒是服務請求的總時間,2449毫秒是等待Web服務的響應所花費的時間,861毫秒是內部按摩數據所花費的時間。
這些不同的計算發生在我們代碼中的不同位置,我們不能只對每個時間進行計時並在單個方法結束時調用記錄器。 我們中的一個人建議為此使用log4j的MDC作為窮人的全局變量集,以跟蹤不同的執行時間。
所以我的問題如下:
請看看SLF4J分析器 。 有趣的是。 開發tt是為了滿足完全相同的需求,即測量和提高SOAP調用的性能。
聽起來像Perf4J的工作。
我將執行以下操作:
雖然肯定會奏效,但我也很想念這個想法。 我的建議是為此創建一個計時類,該計時類使用ThreadLocal
為每個請求創建一個變量。
當請求到來時,您將創建變量(開始時間long
)。 當變量已經存在時,請不要理會它。 將結果發送回客戶端后,您可以計算持續時間並將其記錄下來。
我會使用Spring和面向方面的編程來做到這一點。 令人高興的是,我只需編寫一次邏輯並將其聲明性地應用於我需要的任何地方。
一種簡單的方法是使用System.currentTimeMillis()
,該方法以毫秒為單位返回時間。 方法開始時的毫秒與方法結束時的毫秒之間的差將給出執行該特定方法所用的毫秒數。 希望System.currentTimeMillis()
將為您提供幫助。
我們只在第一個請求過濾器中使用它:
logger.trace("Init");
long start = System.currentTimeMillis();
//do stuff here
long stop = System.currentTimeMillis();
String time = Util.getTimeDifferenceInSec(start, stop);
logger.trace("Complete in " + time + " sec");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.