TraceListener in OWIN Self Hosting

I am using Microsoft.Owin.Hosting to host the following, very simple web app.

Here is the call to start it:

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

Here is the startup class I am using:

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

I am running this inside a console application that does a lot of other things including routing trace writing to certain files etc. But all of a sudden (when activating the OWIN hosting) I am seeing trace messages written to the console that are normally routed somewhere else.

Obviously there are some trace listeners active in the OWIN hosting framework. How can I switch them off?


I had the same issue, I was self hosting 4 instances in one process and for each request was getting 4 lots of messages traced to console.

I simply removed the TraceListener instance

Trace.Listeners.Remove("HostingTraceListener")

"HostingTraceListener" is defined in the owin source code so I guess could change - http://katanaproject.codeplex.com/SourceControl/latest#src/Microsoft.Owin.Hosting/Engine/HostingEngine.cs

I did this after

WebApp.Start(...

An alternative to the answer from meilke that works with latest 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 is similar to DummyFactory but using StreamWriter.Null instead of StringWriter:

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

I found a solution myself. After studying the Katana source code it seems like you need to register your own ITraceOutputFactory instance to overrule the default trace listener (which is writing to the console).

Here is the new start call:

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();
}

And here is a dummy trace factory (maybe not the best solution but you can replace it with something serving your purpose a little better):

public class DummyFactory : ITraceOutputFactory
{
    public TextWriter Create(string outputFile)
    {
        return TextWriter.Null;
    }
}
链接地址: http://www.djcxy.com/p/95096.html

上一篇: asp.net web api自主托管/ owin / katana

下一篇: TraceListener在OWIN Self Hosting中