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