WebAPI 2.2和Trace.axd

时间:2014-08-20 22:52:17

标签: asp.net-web-api

我使用的是WebApi 2.2并安装了 WebApi 2.2 Tracing 包。

在我的 WebApiConfig.Register 方法中,我添加了这一行:

    config.EnableSystemDiagnosticsTracing();

我想在我的操作方法中向 trace.axd 写出一些信息,就像我以前用ASP.NET webform做的那样。

类似的东西:

    [Route("getCurrentUser")]
    [HttpPost]
    public IHttpActionResult GetCurrentUser()
    {

        Trace.WriteLine("GetCurrentUser"); // doesn't work

        Configuration.Services.GetTraceWriter().Warn(
        Request, "AccountController", "GetCurrentUser"); // doesn't work either

    }

但是我没有在trace.axd中看到任何内容。

我确实看到了视觉工作室中记录的信息,当我调试它时,但它写出了太多我不需要的信息。

我真正想要的只是看到我在我的动作方法中专门写的跟踪信息。

谢谢!

2 个答案:

答案 0 :(得分:0)

启用该功能后,它会创建SystemDiagnosticsTraceWriter类的新实例。默认的TraceLevel是Info,因此你的Warn应该可以工作。

默认情况下,SystemDiagnosticsTraceWriter将跟踪写入System.Diagnostics.Trace,它们将在Visual Studio的“输出”窗口中编写。所以你应该注册额外的Trace Listeners。

您应该在Web配置中将其配置到何处将跟踪逻辑写入?

我猜测Trace.axd是ASP.NET Trace Viewer并且与ASP.NET Pages一起使用。不确定它是否可以与Web API一起使用。

但您可以配置不同的跟踪侦听器,例如到事件日志或控制台,或文件或自定义跟踪编写器:

<system.diagnostics>
    <trace autoflush="false" indentsize="4">
      <listeners>
        <add name="eventLogListener"
          type="System.Diagnostics.EventLogTraceListener"
          initializeData="TraceListenerLog" />
        <add name="logFileListener" 
      type="System.Diagnostics.TextWriterTraceListener" 
      initializeData="E:\CompressedLogs\Service1-WebApi-TraceOutput.log" />
    <remove name="Default" />
      </listeners>
    </trace>
  </system.diagnostics>

答案 1 :(得分:0)

很棒的问题,我选择了一个Web API跟踪组件,第一个想到的是ASP.NET跟踪,因为它很容易启用/禁用和保护。没有必要安装额外的包; ASP.NET Trace可以通过 System.Web.HttpContext.Current 使用:

using System.Web;
...
catch(Exception e)
{
   HttpContext.Current.Trace.Warn("MyWebAPI", string.Format("[ERROR] {0}", e));
}

请记住在web.config中启用跟踪:

<trace enabled="true" pageOutput="false" localOnly="true" requestLimit="200" />

我离开使用pageOutput="false" localOnly="true"因为我认为它是最安全的跟踪配置(除了被禁用;-):页面上没有跟踪输出,并且跟踪可以是仅由服务器上运行的浏览器查看。

如果您需要查看生产环境中的痕迹,请记得在使用后将其关闭。