Asp.net web api Web Api:在服务器运行时禁用跟踪

Asp.net web api Web Api:在服务器运行时禁用跟踪,asp.net-web-api,trace,Asp.net Web Api,Trace,我可以通过替换默认的无操作跟踪编写器来启用跟踪 GlobalConfiguration.Configuration.Services.Replace(typeof(ITraceWriter), new SimpleTracer()); 但是,在服务器运行时,如何禁用(并再次启用它) 枚举“TraceLevel”具有TraceLevel.Off选项。 有没有办法将跟踪框架表单web api设置为TraceLevel.Off?看看这篇文章 WebApi不提供任何方法来配置跟踪编写器的当前类别或级别

我可以通过替换默认的无操作跟踪编写器来启用跟踪

GlobalConfiguration.Configuration.Services.Replace(typeof(ITraceWriter), new SimpleTracer());
但是,在服务器运行时,如何禁用(并再次启用它)

枚举“TraceLevel”具有TraceLevel.Off选项。
有没有办法将跟踪框架表单web api设置为TraceLevel.Off?

看看这篇文章

WebApi不提供任何方法来配置跟踪编写器的当前类别或级别

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

这种方法的目的是依靠ITraceWriter 实现自己的机制,用于配置跟踪的内容和 在哪里

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

简而言之,如果要启用和禁用跟踪,或者选择不记录特定级别的跟踪,则由您在
SimpleTracer
中实现

您可以创建自己的threadsafe singleton TraceConfiguration(类似于GlobalConfiguration)实现,以控制跟踪配置,从而允许在代码中切换开或关

public void Trace(HttpRequestMessage request, string category, TraceLevel level, Action<TraceRecord> traceAction)
{
     if(TraceConfiguration.Configuration.IsEnabled)
     {
        //trace
     }
}
公共无效跟踪(HttpRequestMessage请求、字符串类别、跟踪级别、操作跟踪动作)
{
if(TraceConfiguration.Configuration.IsEnabled)
{
//痕迹
}
}
或者,您可以设置并访问请求对象的属性,以确定是否启用跟踪。这可以由操作和控制器上的ActionFilters设置,甚至可以在控制器内设置

public void Trace(HttpRequestMessage request, string category, TraceLevel level, Action<TraceRecord> traceAction)
{
     if(request.Properties["SupressTracing"] as string != "true")
     {
        //trace
     }
}
公共无效跟踪(HttpRequestMessage请求、字符串类别、跟踪级别、操作跟踪动作)
{
if(request.Properties[“superstracing”]作为字符串!=“true”)
{
//痕迹
}
}

或者,正如文章所建议的,如果您正在使用NLog或Log4Net等,则由您通过配置等设置启用的级别。

什么是“服务器正在运行”?当服务器“未”运行时,您将如何启用该功能?谁会执行你的代码?好的。看来我得自己做这项工作了。顺便说一句:我不想使用NLog。这个框架的性能非常差。