我正在使用Microsoft.Owin.Hosting
来托管以下非常简单的网络应用。
以下是启动它的电话:
WebApp.Start<PushServerStartup>("http://localhost:8080/events");
这是我正在使用的启动类:
public class PushServerStartup
{
public void Configuration(IAppBuilder app)
{
app.MapHubs();
}
}
我在一个控制台应用程序中运行它,它执行许多其他操作,包括将跟踪写入路由到某些文件等。但突然(当激活OWIN主机时)我看到写入控制台的跟踪消息是通常在其他地方路由。
显然,在OWIN托管框架中有一些活动跟踪侦听器。如何关闭它们?
答案 0 :(得分:21)
我有同样的问题,我在一个进程中自我托管了4个实例,并且每个请求都获得了4个跟踪到控制台的消息。
我只是删除了TraceListener实例
Trace.Listeners.Remove("HostingTraceListener")
“HostingTraceListener”在owin源代码中定义,所以我想可以改变 - http://katanaproject.codeplex.com/SourceControl/latest#src/Microsoft.Owin.Hosting/Engine/HostingEngine.cs
我是在
之后做到的WebApp.Start(...
答案 1 :(得分:12)
替代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<PushServerStartup>(options))
NullTraceOutputFactory类似于DummyFactory但使用StreamWriter.Null而不是StringWriter:
public class NullTraceOutputFactory : ITraceOutputFactory
{
public TextWriter Create(string outputFile)
{
return StreamWriter.Null;
}
}
答案 2 :(得分:1)
我自己找到了解决方案。在研究了Katana源代码之后,您似乎需要注册自己的ITraceOutputFactory
实例来否决默认的跟踪侦听器(写入控制台)。
这是新的首发电话:
var dummyFactory = new DummyFactory();
var provider = ServicesFactory.Create(
defaultServiceProvider => defaultServiceProvider.AddInstance<ITraceOutputFactory>(dummyFactory));
using (WebApp.Start<Startup>(provider, new StartOptions("http://localhost:8090")))
{
Console.ReadLine();
}
这是一个虚拟跟踪工厂(可能不是最好的解决方案,但你可以用更好的服务来替换它):
public class DummyFactory : ITraceOutputFactory
{
public TextWriter Create(string outputFile)
{
return TextWriter.Null;
}
}