Web Api:在服务器运行时禁用跟踪

时间:2012-12-11 15:34:10

标签: asp.net-web-api tracing

我可以通过替换默认的No Op跟踪编写器来启用跟踪。

GlobalConfiguration.Configuration.Services.Replace(typeof(ITraceWriter), new SimpleTracer());

但是如何在服务器运行时禁用(并再次启用它)?

Enum" TraceLevel"有TraceLevel.Off选项。 有没有办法将跟踪框架表格web api设置为TraceLevel.Off?

1 个答案:

答案 0 :(得分:1)

看一下这篇文章here

  

WebApi没有提供任何方法来配置关于其当前类别或级别的跟踪编写器。

  

确定当前启用的类别和级别是   ITraceWriter实施的责任。 Web API   框架没有跟踪配置的概念或确定哪个   类别和级别已启用。

     

这种方法的目的是依赖ITraceWriter   实现自己的机制来配置被跟踪的内容和   其中。

     

例如,如果您使用特定于NLog的ITraceWriter,则应该   通过NLog配置机制配置跟踪。

简而言之,如果您想要启用和禁用跟踪,或者选择不记录特定级别的跟踪,则需要在SimpleTracer内部实施。

您可以创建自己的线程安全单一TraceConfiguration(类似于GlobalConfiguration)实现来控制跟踪配置,以允许在代码中打开或关闭。

public void Trace(HttpRequestMessage request, string category, TraceLevel level, Action<TraceRecord> traceAction)
{
     if(TraceConfiguration.Configuration.IsEnabled)
     {
        //trace
     }
}

或者,您可以设置和访问请求对象上的属性,以确定是否启用跟踪。这可以由ActionFilters在操作和控制器上设置,甚至可以在控制器中设置。

public void Trace(HttpRequestMessage request, string category, TraceLevel level, Action<TraceRecord> traceAction)
{
     if(request.Properties["SupressTracing"] as string != "true")
     {
        //trace
     }
}

或者正如文章建议的那样,如果您使用的是NLog或Log4Net等,则可以通过配置等设置启用的级别。