TraceListener在OWIN Self Hosting中

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

下面是启动它的电话:

WebApp.Start<PushServerStartup>("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 self-host(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;
    }
}

我自己找到了解决方案。 在研究了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;
    }
}
链接地址: http://www.djcxy.com/p/95095.html

上一篇: TraceListener in OWIN Self Hosting

下一篇: PHP Zip file download issue