如何使ASP.NET MVC跟踪信息与页面内跟踪输出一致为trace.axd?我可能只是遗漏了一些明显的东西,如果你看到它,请把它叫出来.
回到常规的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">
Run Code Online (Sandbox Code Playgroud)
然后,您可以在页面中添加以下内容:
HttpContext.Current.Trace.Write("Write Trace Here");
or
System.Diagnostics.Trace.Write("Write Trace Here");
Run Code Online (Sandbox Code Playgroud)
如果你点击你的页面(即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
Run Code Online (Sandbox Code Playgroud)
命中localhost:61115/Trace.axd?id = 0将保留与页内跟踪输出相同的跟踪结果.
不幸的是,由于我不知道的原因,我无法在ASP.NET MVC 2.0中使用它.我使用类似于上面列出的web.config设置.有趣的是,我只能获得部分工作的痕迹.因此,如果我点击功能等效的默认页面(也就是我的homecontroller的索引操作方法),我会看到所有传统的asp.net页面事件,例如preinit,preload,prerender等,但是没有使用System.Diagnostics也没有自定义跟踪消息. HttpContext.Trace.Write.
但是,如果我转向Trace.axd?id = 0文件,我会收到我的自定义跟踪消息,但没有ASP.NET页面事件跟踪输出.我必须在这里遗漏一些导致我在页面与trace.axd中看到的跟踪信息不一致的事情(回想一下传统的asp.net输出相同的页内与trace.axd输出).我真的希望我的页内跟踪信息与trace.axd一致(通过删除传统的asp.net页面事件或其他方式).有什么我想念的吗?