我可以通过替换默认的No Op跟踪编写器来启用跟踪。
GlobalConfiguration.Configuration.Services.Replace(typeof(ITraceWriter), new SimpleTracer());
但是如何在服务器运行时禁用(并再次启用它)?
Enum" TraceLevel"有TraceLevel.Off选项。 有没有办法将跟踪框架表格web api设置为TraceLevel.Off?
答案 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等,则可以通过配置等设置启用的级别。