c# - owinstartup - TraceListener en OWIN Self Hosting
owin web api (3)
Estoy usando Microsoft.Owin.Hosting
para alojar la siguiente aplicación web, muy simple.
Aquí está la llamada para iniciarlo:
WebApp.Start<PushServerStartup>("http://localhost:8080/events");
Aquí está la clase de inicio que estoy usando:
public class PushServerStartup
{
public void Configuration(IAppBuilder app)
{
app.MapHubs();
}
}
Estoy ejecutando esto dentro de una aplicación de consola que hace muchas otras cosas, incluida la escritura de rastreo de enrutamiento a ciertos archivos, etc. Pero de repente (al activar el alojamiento OWIN) estoy viendo mensajes de rastreo escritos en la consola que normalmente se enrutan en algún lugar más.
Obviamente, hay algunos escuchas de rastreo activos en el marco de alojamiento OWIN. ¿Cómo puedo apagarlos?
Tuve el mismo problema, me alojé automáticamente 4 instancias en un proceso y para cada solicitud recibí 4 lotes de mensajes rastreados en la consola.
Simplemente quité la instancia de TraceListener
Trace.Listeners.Remove("HostingTraceListener")
"HostingTraceListener" está definido en el código fuente de owin, así que supongo que podría cambiar - http://katanaproject.codeplex.com/SourceControl/latest#src/Microsoft.Owin.Hosting/Engine/HostingEngine.cs
Hice esto después
WebApp.Start(...
Una alternativa a la respuesta de meilke que funciona con el último host automático de 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 es similar a DummyFactory pero usando StreamWriter.Null en lugar de StringWriter:
public class NullTraceOutputFactory : ITraceOutputFactory
{
public TextWriter Create(string outputFile)
{
return StreamWriter.Null;
}
}
Yo mismo encontré una solución. Después de estudiar el código fuente de Katana, parece que necesita registrar su propia instancia de ITraceOutputFactory
para anular la escucha de seguimiento predeterminada (que está escribiendo en la consola).
Aquí está la nueva llamada de inicio:
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();
}
Y aquí hay un dummy trace factory (quizás no sea la mejor solución, pero puede reemplazarla con algo que sirva un poco mejor a su propósito):
public class DummyFactory : ITraceOutputFactory
{
public TextWriter Create(string outputFile)
{
return TextWriter.Null;
}
}