OWIN Self Hosting中的TraceListener

我正在使用Microsoft.Owin.Hosting来托管以下非常简单的Web应用程序。

这是启动它的电话:

 WebApp.Start("http://localhost:8080/events"); 

这是我正在使用的启动类:

 public class PushServerStartup { public void Configuration(IAppBuilder app) { app.MapHubs(); } } 

我在一个控制台应用程序中运行它,它执行许多其他操作,包括路由跟踪写入某些文件等。但突然(当激活OWIN主机时)我看到写入控制台的跟踪消息通常在某处路由其他。

显然,在OWIN托管框架中有一些活动跟踪侦听器。 我怎样才能关掉它们?

我遇到了同样的问题,我在一个进程中自我托管了4个实例,并且每个请求都获得了4个跟踪到控制台的消息。

我只是删除了TraceListener实例

 Trace.Listeners.Remove("HostingTraceListener") 

“HostingTraceListener”在owin源代码中定义,所以我想可以改变 – http://katanaproject.codeplex.com/SourceControl/latest#src/Microsoft.Owin.Hosting/Engine/HostingEngine.cs

我之后做了这个

 WebApp.Start(... 

替代meilke的答案,与最新的Katana自托管(2.1.0)一起使用:

 StartOptions options = new StartOptions("http://localhost:8080/events"); // disable built-in owin tracing by using a null traceoutput options.Settings.Add( typeof(Microsoft.Owin.Hosting.Tracing.ITraceOutputFactory).FullName, typeof(NullTraceOutputFactory).AssemblyQualifiedName); using (WebApp.Start(options)) 

NullTraceOutputFactory类似于DummyFactory但使用StreamWriter.Null而不是StringWriter:

 public class NullTraceOutputFactory : ITraceOutputFactory { public TextWriter Create(string outputFile) { return StreamWriter.Null; } } 

我自己找到了解决方案。 在研究Katana源代码之后,您似乎需要注册自己的ITraceOutputFactory实例来否决默认跟踪侦听器(写入控制台)。

这是新的首发电话:

 var dummyFactory = new DummyFactory(); var provider = ServicesFactory.Create( defaultServiceProvider => defaultServiceProvider.AddInstance(dummyFactory)); using (WebApp.Start(provider, new StartOptions("http://localhost:8090"))) { Console.ReadLine(); } 

这里有一个虚拟跟踪工厂(可能不是最好的解决方案,但你可以用更好的服务来替换它):

 public class DummyFactory : ITraceOutputFactory { public TextWriter Create(string outputFile) { return TextWriter.Null; } }