2014-10-02 53 views
0

我希望在控制器中打印每個請求,請求開始時,結束時以及過程有多長時間。我是否需要將這些代碼分別添加到每個請求中或者是否有任何通用的方法來執行此操作?Grails:打印每個請求需要多長時間

+0

對於快速而簡單的事情,你看了一下Profiler插件嗎? http://grails.org/plugin/profiler – 2014-10-02 22:30:25

回答

3

除了存在各種各樣的插件(例如Profiler)之外,一個非常簡單的解決方案就是使用過濾器。此blog post將引導您完成設置過濾器的過程,該過濾器將記錄每個控制器操作的開始和結束時間。

使用Grails的過濾器將是一個很簡單的例子:

class PerfFilter { 
    def filters = { 
    profiler(controller: '*', action: '*') { 
     before { 
     request._startTime = System.currentTimeMillis() 
     log.trace("Beginning ${controllerName} ${actionName}") 
     } 
     after { 
     log.trace("Finished ${controllerName} ${actionName}") 
     log.trace("Total time to execute was: ${System.currentTimeMillis() - request._startTime}") 
     } 
    } 
    } 
} 

如果你需要的東西的整體性能監控更加堅固我強烈建議Javamelody plugin Grails的。

+0

我可以在過濾器中存儲狀態嗎?例如,我可以將時間存儲在「之前」,並在「之後」使用? – 2014-10-02 22:38:44

+1

你當然可以。您可以將其添加到參數映射,請求範圍,閃存範圍,任意數量的方式。例如。在'request._timeBeforeRequest = System.currentTimeMillis()'之前,我鏈接到的博客帖子中有一個例子。 – 2014-10-02 22:40:08

+0

更新了我的答案中的示例,其中包括顯示執行控制器操作的總時間。 – 2014-10-02 22:51:53

0

apache AB幫助非常大。您可以使用一個併發性和一個請求來進行ab測試,以顯示需要的時間。我還會建議一個名爲「New Relic」的工具。非常適合測試並顯示請求和瓶頸的時間。