Asp.net mvc ASP.NET MVC跟踪问题 问题:

Asp.net mvc ASP.NET MVC跟踪问题 问题:,asp.net-mvc,trace,Asp.net Mvc,Trace,如何使ASP.NET MVC跟踪信息与作为trace.axd的页内跟踪输出一致?我可能只是遗漏了一些明显的东西,如果你看到了请大声说出来 传统ASP.NET的背景信息 因此,在常规ASP.NET时代,您可以简单地将以下内容添加到web.config中: <system.diagnostics> <trace> <listeners> <add name="WebPageTraceListener" type

如何使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">
如果您点击您的页面(即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页面事件,如preinit、preload、prerender等,但没有使用System.Diagnostics或HttpContext.trace.Write的自定义跟踪消息


但是,如果我转到Trace.axd?id=0文件,我会收到自定义跟踪消息,但没有ASP.NET页面事件跟踪输出。我在这里肯定遗漏了一些东西,导致我在page和trace.axd中看到的跟踪信息不一致(回想一下,传统的asp.net输出在page和trace.axd输出中是相同的)。我确实希望我的页内跟踪信息与trace.axd保持一致(通过删除传统的asp.net页事件或其他方式)。我有什么遗漏吗

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

直接引用“MVC 2正在运行”一书中的内容:

在Web中调用Trace.Write()时 表单,您正在与 跟踪上下文类。这存在于 您的ViewPage在ASP.NET MVC中,但是 不是你想写的地方 跟踪语句。当你离开的时候 把指挥棒传给观景台, 这里没有你需要的逻辑 追踪。相反,您希望跟踪 你的生活中的逻辑 控制器。你可以试着利用 数据库中的TraceContext类 控制器,但这些语句不会 你有没有想过自己会被列入名单 跟踪日志中的消息(在您的 第页或在Trace.axd上)。相反,你 可以使用System.Diagnostics.Trace和 设置您自己的跟踪侦听器,以便 检查您的活动 控制器。或者,你可以 利用更成熟的日志记录 log4net或NLog等框架:

调试ASP.NET MVC应用程序 就像任何.NET一样 应用然而,追踪并不是这样 提供同样多的MVC。相反,你 可以依靠内置的 NET中的TraceListener,或利用 很好的日志库 前面提到过。另一方面 错误日志记录是运行状况监视


很抱歉没有用我自己的话回答,但我认为这一解释很贴切:)

这句话不适用于过滤器和操作中的跟踪。即使这样,它也不适用,因为您可以从OnResultExecuting获得跟踪输出。只有在无法获得跟踪输出的情况下才执行ResultExecuted

通过在Cassini中运行我的MVC 3应用程序,我只能在IIS 7.5中获得集成跟踪输出,然后集成跟踪开始在IIS 7.5中工作


我正在调查MVC中的一些痕迹异常,实际上,现在可以这样做了。通过使用scape,您可以返回并使用Trace.Write


只有在ASP.NET MVC 3.0及以上版本中,才能尝试使用Html.Action让控制器为您执行跟踪。 例如,如果需要从默认错误视图跟踪错误,可以使用

Html.Action("TraceError", "Error", new { ControllerName = Model.ControllerName, ActionName = Model.ActionName, Exception = Model.Exception })
然后在错误控制器中,实现该方法

public ActionResult TraceError(String ControllerName, String ActionName, Exception Exception)
{
    System.Diagnostics.Trace.TraceError("Error Message: {0}", Exception.Message);
    // Other tracing statements
}

“我使用类似的web.config设置”也许发布这些设置可以帮助人们理解哪里出了问题?通常,指向工具或库的链接,或者如果可能的话,上面的所有内容。
public ActionResult TraceError(String ControllerName, String ActionName, Exception Exception)
{
    System.Diagnostics.Trace.TraceError("Error Message: {0}", Exception.Message);
    // Other tracing statements
}