2014-10-02 52 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”的工具。非常适合测试并显示请求和瓶颈的时间。