TraceListener в OWIN Self Hosting

Я использую Microsoft.Owin.Hosting для размещения следующего, очень простого веб-приложения.

Вот вызов для его запуска:

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

Вот класс запуска, который я использую:

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

Я запускаю это внутри консольного приложения, которое выполняет множество других функций, включая маршрутизацию трассировки в определенные файлы и т.д. Но внезапно (при активации хостинга OWIN) я вижу сообщения о трассировке, написанные на консоли, которые обычно маршрутизируется где-то еще.

Очевидно, что в хостинговой системе OWIN активны прослушиватели трассировки. Как отключить их?

Ответы

Ответ 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();
}

И вот фиктивная трассировка factory (может быть, не лучшее решение, но вы можете заменить ее чем-то, служащим вашей цели немного лучше):

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

Ответ 2

У меня была одна и та же проблема: я сам принимал 4 экземпляра в одном процессе и для каждого запроса получалось 4 много сообщений, отслеживаемых для консоли.

Я просто удалил экземпляр TraceListener

Trace.Listeners.Remove("HostingTraceListener")

"HostingTraceListener" определяется в исходном коде owin, поэтому, я думаю, может измениться  - http://katanaproject.codeplex.com/SourceControl/latest#src/Microsoft.Owin.Hosting/Engine/HostingEngine.cs

Я сделал это после

WebApp.Start(...

Ответ 3

Альтернатива ответа от 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;
    }
}