Question
如何使 ASP.NET MVC 跟踪信息与作为 Trace.axd 的页内跟踪输出保持一致?我可能遗漏了一些明显的东西,如果你看到它,请指出。
传统 ASP.NET 的背景信息
因此,回到常规的 ASP.NET 时代,您只需将以下内容添加到您的 web.config 中:
<system.diagnostics>
<trace>
<listeners>
<add name="WebPageTraceListener" type="System.Web.WebPageTraceListener, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</listeners>
</trace>
</system.diagnostics>
...
<system.web>
<trace enabled="true" pageOutput="true" writeToDiagnosticsTrace="true"/>
...
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" warningLevel="1" compilerOptions="/d:TRACE" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
然后您可以在页面中添加以下内容:
HttpContext.Current.Trace.Write("Write Trace Here");
or
System.Diagnostics.Trace.Write("Write Trace Here");
如果您点击您的页面(即 localhost:61115/Default.aspx),您将获得一个很好的跟踪表,其中嵌入了 asp.net 页面事件的自定义跟踪:
aspx.page Begin Load 0.00343 0.000357
test 0.00462176 0.001192
aspx.page End Load 0.00526904 0.000018
点击 localhost:61115/Trace.axd?id=0 将保留与页内跟踪输出相同的跟踪结果。
ASP.NET MVC 背景信息
不幸的是,由于我未知的原因,我无法让它在 ASP.NET MVC 2.0 中工作。我使用与上面列出的类似的 web.config 设置。有趣的是我只能得到部分工作的痕迹。因此,如果我点击功能等效的默认页面(又名我的 homecontroller 的索引操作方法),我会看到所有传统的 ASP.NET 页面事件,例如预初始化、预加载、预渲染等,但没有使用 System.Diagnostics 或 System.Diagnostics 的自定义跟踪消息HttpContext.Trace.Write。
但是,如果我转向 Trace.axd?id=0 文件,我会看到自定义跟踪消息,但不会看到 ASP.NET 页面事件跟踪输出。我一定遗漏了一些东西,导致我在页内和trace.axd 中看到的跟踪信息不一致(回想一下,传统的asp.net 输出相同的页内和trace.axd 输出)。我真的很想让我的页内跟踪信息与trace.axd 一致(通过删除传统的asp.net 页面事件或其他方式)。我有什么遗漏的吗?