我可以通过替换默认的 No Op 跟踪编写器来启用跟踪。
GlobalConfiguration.Configuration.Services.Replace(typeof(ITraceWriter), new SimpleTracer());
但是如何在服务器运行时禁用(并再次启用)?
枚举“TraceLevel”具有选项 TraceLevel.Off。有没有办法将跟踪框架表单 web api 设置为 TraceLevel.Off?
我可以通过替换默认的 No Op 跟踪编写器来启用跟踪。
GlobalConfiguration.Configuration.Services.Replace(typeof(ITraceWriter), new SimpleTracer());
但是如何在服务器运行时禁用(并再次启用)?
枚举“TraceLevel”具有选项 TraceLevel.Off。有没有办法将跟踪框架表单 web api 设置为 TraceLevel.Off?
看看这篇文章在这里。
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 等,则取决于您通过配置等设置启用的级别。