仅针对特定请求的MVC跟踪

时间:2012-07-04 03:14:31

标签: c# asp.net-mvc asp.net-mvc-3

我想在mvc中启用跟踪,具体来说,如果满足某个条件,我想在页面上显示跟踪。

如果我在单个请求的上下文中请求它们,是否可以显示System.Diagnostics.Trace次写入?

2 个答案:

答案 0 :(得分:3)

不幸的是,Trace class无法根据您要基于每个请求解决的条件来打开/关闭跟踪。这是一种全有或全无的方法。

那就是说,我高度推荐MVC MiniProfiler(这里用于Stack Exchange网站,最着名的是Stack Exchange Data Explorer上的公众)。

你基本上会在你的页面上得到这样的渲染:

MiniProfiler screenshot

您可以根据请求设置分析:

using StackExchange.Profiling;
...    
protected void Application_BeginRequest()
{
    if (Request.IsLocal)
    {
        MiniProfiler.Start();
    } 
}

语法与使用Trace类略有不同,因为您必须使用using语句,如下所示:

using (profiler.Step("Set page title"))
{
    ViewBag.Title = "Home Page";
}

原因是这是一个根本不同的操作;当你追踪时,你正在某个时间点写出一条信息。在进行性能分析时,您正在查看时间段,而using语句允许您对这些段进行范围化。

这可能有点矫枉过正,但我​​很乐意在Trace使用它,因为分析方面以及所显示信息的非侵入性(Trace有一个讨厌的习惯使页面看起来很奇怪)。

答案 1 :(得分:0)

我最终使用了一个记录器通过我的类,然后在必要时有条件地在控制器中显示该信息。

使用容器,我将我的记录器实例绑定到HttpContext的范围,然后将其泵入我的视图模型。

相关问题