2010-12-12 53 views
3

我想我可能已经知道答案了,但是在这里。我想记录何时调用某些方法,但是我被撕裂了,因为通过对这些方法使用OutputCache属性,我获得了性能优势。当多次调用该方法时,ASP.NET MVC会从之前的调用中返回HTML,而缓存尚未过期,并且非常快速。但是该方法中的任何日志记录命令都不会执行。OutputCache和ASP.NET MVC 2.0中的日志记录

有没有办法让我打开日志来记录这些方法的调用时间,而不必删除[OutputCache]并失去了我得到的性能好处?基于属性的日志记录机制是否会以某种方式工作,即使[OutputCache]属性基本上在前一个输出被缓存时短路了方法执行?

感谢, 杰夫

回答

1

达林季米特洛夫是正确的,使用Application_BeginRequestApplication_EndRequest方法。

这是你会怎么做:如果版本是从缓存送达或不

protected void Application_BeginRequest() 
{ 
    var routeCollection = RouteTable.Routes; 
    var routeData = routeCollection.GetRouteData(new HttpContextWrapper(HttpContext.Current)); 

    // Log 
    Debug.WriteLine("Invoking " + routeData.Values["Controller"] + "::" + routeData.Values["Action"]); 
} 

protected void Application_EndRequest() 
{ 
    // Log 
    Debug.WriteLine("EndRequest"); 
} 

这些方法将得到无论调用。

+0

感谢两位响应者 - 非常有帮助!我想象我将无法访问依赖于模型绑定的传入参数值,但我仍然可以使用这种技术。甚至可能为任何这样的方法实现一个新的属性,并将任何传入的调用记录到来自Application_BeginRequest的那些方法中。 – blaster 2010-12-12 15:37:31

2

您可以使用Application_BeginRequestApplication_EndRequest事件Global.asax之前和执行行动后,登录信息。这些事件即使对于使用[OutputCache]属性修饰的控制器操作也会触发。