Question
How do I get ASP.NET MVC trace information to be consistent for in-page trace output as trace.axd? I may just be missing something obvious, please call it out if you see it.
Background Info for Traditional ASP.NET
So back in the regular ASP.NET days, you could simply add the following to your 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">
Then you could add the following in your pages:
HttpContext.Current.Trace.Write("Write Trace Here");
or
System.Diagnostics.Trace.Write("Write Trace Here");
And if you hit your page (i.e. localhost:61115/Default.aspx), you would get a nice trace table with your custom trace embedded with asp.net page events:
aspx.page Begin Load 0.00343 0.000357
test 0.00462176 0.001192
aspx.page End Load 0.00526904 0.000018
Hitting localhost:61115/Trace.axd?id=0 would retain the same trace results as the in-page trace outputs.
Background Info on ASP.NET MVC
Unfortunately, I cannot get this to work in ASP.NET MVC 2.0 for reasons unknown to me. I use similar web.config settings as ones listed above. What is interesting is that I can only get traces to partially work. So if I hit the functionality equivalent default page (aka index action method of my homecontroller), I see all of the traditional asp.net page events such as preinit, preload, prerender, etc but no custom trace msg using either System.Diagnostics nor HttpContext.Trace.Write.
However, if I turn to the Trace.axd?id=0 file, I'm greeted with my custom trace messages but no ASP.NET page event trace output. I must be missing something here that is causing this inconsistency in trace information I see in-page vs. trace.axd (recall that traditional asp.net outputs identical in-page vs. trace.axd outputs). I would really like to have my in-page trace information consistent with trace.axd (either by removing the traditional asp.net page events or other means). Is there something I am missing?
Actually, now this can be done. Using glimpse, you can return and use Trace.Write in MVC.
http://getglimpse.com/
Only for ASP.NET MVC 3.0 and up
You could try to use Html.Action to get the controller to do the tracing for you. For example, if you need to trace the error from the default Error view, you can use
Then inside your Error Controller, implement the method
Instead of using the HttpContext.Current.Trace or the System.Diagnostics.Trace, try using the Controller.HttpContext.Trace ?
Quoting directly from the book "MVC 2 in action":
Sorry for not answering in my own words, but I think this explanation is spot on :)
The quote doesn't apply to tracing in filters and actions. Even then, it doesn't apply as you can get trace output from OnResultExecuting. It's only OnResultExecuted where it's too late to get trace output.
I was only able to get integrated trace output to work in IIS 7.5 by running my MVC 3 application in Cassini - then integrated tracing started working in IIS 7.5.
I'm investigating some trace anomolies in MVC