diff --git a/NzbDrone.Host/MainAppContainerBuilder.cs b/NzbDrone.Host/MainAppContainerBuilder.cs index 51f47d415..ecebe6e70 100644 --- a/NzbDrone.Host/MainAppContainerBuilder.cs +++ b/NzbDrone.Host/MainAppContainerBuilder.cs @@ -1,4 +1,5 @@ -using Nancy.Bootstrapper; +using System; +using Nancy.Bootstrapper; using NzbDrone.Api; using NzbDrone.Api.SignalR; using NzbDrone.Common.Composition; @@ -6,6 +7,7 @@ using NzbDrone.Common.EnvironmentInfo; using NzbDrone.Core.Datastore; using NzbDrone.Core.Organizer; using NzbDrone.Core.RootFolders; +using NzbDrone.Host.Owin; namespace NzbDrone.Host { @@ -24,6 +26,7 @@ namespace NzbDrone.Host Container.Register(typeof(IBasicRepository), typeof(BasicRepository)); Container.Register(typeof(IBasicRepository), typeof(BasicRepository)); + Container.Register(typeof(System.IServiceProvider), typeof(OwinServiceProvider)); Container.Register(); } diff --git a/NzbDrone.Host/NzbDrone.Host.csproj b/NzbDrone.Host/NzbDrone.Host.csproj index ce9da2e81..ddb934a54 100644 --- a/NzbDrone.Host/NzbDrone.Host.csproj +++ b/NzbDrone.Host/NzbDrone.Host.csproj @@ -122,6 +122,9 @@ + + + diff --git a/NzbDrone.Host/Owin/NlogTextWriter.cs b/NzbDrone.Host/Owin/NlogTextWriter.cs new file mode 100644 index 000000000..d4cd4da7d --- /dev/null +++ b/NzbDrone.Host/Owin/NlogTextWriter.cs @@ -0,0 +1,41 @@ +using System.IO; +using System.Text; +using NLog; + +namespace NzbDrone.Host.Owin +{ + public class NlogTextWriter : TextWriter + { + private readonly Logger logger = LogManager.GetCurrentClassLogger(); + + + public override Encoding Encoding + { + get + { + return Encoding.Default; + } + } + + public override void Write(char value) + { + logger.Trace(value); + } + + public override void Write(char[] buffer) + { + logger.Trace(buffer); + } + + public override void Write(string value) + { + logger.Trace(value); + } + + public override void Write(char[] buffer, int index, int count) + { + logger.Trace(buffer); + } + + } +} \ No newline at end of file diff --git a/NzbDrone.Host/Owin/OwinHostController.cs b/NzbDrone.Host/Owin/OwinHostController.cs index 0055883b6..447ac71d0 100644 --- a/NzbDrone.Host/Owin/OwinHostController.cs +++ b/NzbDrone.Host/Owin/OwinHostController.cs @@ -14,13 +14,15 @@ namespace NzbDrone.Host.Owin { private readonly IConfigFileProvider _configFileProvider; private readonly IEnumerable _owinMiddleWares; + private readonly IServiceProvider _serviceProvider; private readonly Logger _logger; private IDisposable _host; - public OwinHostController(IConfigFileProvider configFileProvider, IEnumerable owinMiddleWares, Logger logger) + public OwinHostController(IConfigFileProvider configFileProvider, IEnumerable owinMiddleWares, IServiceProvider serviceProvider, Logger logger) { _configFileProvider = configFileProvider; _owinMiddleWares = owinMiddleWares; + _serviceProvider = serviceProvider; _logger = logger; } @@ -37,7 +39,7 @@ namespace NzbDrone.Host.Owin _logger.Info("starting server on {0}", url); - _host = WebApp.Start(options, BuildApp); + _host = WebApp.Start(_serviceProvider, options, BuildApp); } private void BuildApp(IAppBuilder appBuilder) diff --git a/NzbDrone.Host/Owin/OwinServiceProvider.cs b/NzbDrone.Host/Owin/OwinServiceProvider.cs new file mode 100644 index 000000000..e13c76191 --- /dev/null +++ b/NzbDrone.Host/Owin/OwinServiceProvider.cs @@ -0,0 +1,25 @@ +using System; +using Microsoft.Owin.Hosting.Services; +using Microsoft.Owin.Hosting.Tracing; + +namespace NzbDrone.Host.Owin +{ + public class OwinServiceProvider : IServiceProvider + { + private readonly IServiceProvider _defaultProvider; + + public OwinServiceProvider() + { + _defaultProvider = ServicesFactory.Create(); + } + public object GetService(Type serviceType) + { + if (serviceType == typeof (ITraceOutputFactory)) + { + return new OwinTraceOutputFactory(); + } + + return _defaultProvider.GetService(serviceType); + } + } +} \ No newline at end of file diff --git a/NzbDrone.Host/Owin/OwinTraceOutputFactory.cs b/NzbDrone.Host/Owin/OwinTraceOutputFactory.cs new file mode 100644 index 000000000..9a0f8997d --- /dev/null +++ b/NzbDrone.Host/Owin/OwinTraceOutputFactory.cs @@ -0,0 +1,14 @@ +using System.IO; +using Microsoft.Owin.Hosting.Tracing; + +namespace NzbDrone.Host.Owin +{ + public class OwinTraceOutputFactory : ITraceOutputFactory + { + + public TextWriter Create(string outputFile) + { + return new NlogTextWriter(); + } + } +} \ No newline at end of file