ASP.NET MVC跟踪问题

use*_*435 19 asp.net-mvc trace

如何使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">
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的背景信息

不幸的是,由于我不知道的原因,我无法在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页面事件或其他方式).有什么我想念的吗?

pso*_*usa 9

直接从"MVC 2 in action"一书中引用:

在Web窗体中调用Trace.Write()时,您正在与Trace-Context类进行交互.这存在于ASP.NET MVC中的ViewPage上,但这不是您想要编写跟踪语句的位置.当你将指挥棒传递给视图时,那里没有你需要跟踪的逻辑.相反,您希望跟踪控制器中嵌入的逻辑.您可能会尝试在控制器中利用TraceContext类,但这些语句不会进入跟踪日志中的消息列表(在您的页面上或在Trace.axd上).相反,您可以使用System.Diagnostics.Trace并设置自己的TraceListeners来检查控制器中的活动.或者,您可以利用更成熟的日志框架,例如log4net或NLog:

您可以像调试任何.NET应用程序一样调试ASP.NET MVC应用程序.但是,跟踪并不能为MVC提供那么多.相反,您可以依靠.NET中的内置TraceListeners,或者使用前面提到的良好的日志库.错误记录的另一个方面是健康监控.

很抱歉没有用我自己的话回答,但我认为这个解释是现场:)


Mos*_*she 9

实际上,现在可以做到这一点.使用glimpse,您可以在MVC中返回并使用Trace.Write.

http://getglimpse.com/

仅适用于ASP.NET MVC 3.0及更高版本


Pet*_*ter 4

尝试使用 Controller.HttpContext.Trace 而不是使用 HttpContext.Current.Trace 或 System.Diagnostics.Trace ?