From 9b9e1e20eb035a3c026f2a79f3aa6fc8406199e2 Mon Sep 17 00:00:00 2001 From: Keivan Beigi Date: Wed, 28 Aug 2013 15:08:01 -0700 Subject: [PATCH] replaced owin's ITraceOutputFactory to one based on nlog that should work on linux. --- NzbDrone.Host/MainAppContainerBuilder.cs | 5 ++- NzbDrone.Host/NzbDrone.Host.csproj | 3 ++ NzbDrone.Host/Owin/NlogTextWriter.cs | 41 ++++++++++++++++++++ NzbDrone.Host/Owin/OwinHostController.cs | 6 ++- NzbDrone.Host/Owin/OwinServiceProvider.cs | 25 ++++++++++++ NzbDrone.Host/Owin/OwinTraceOutputFactory.cs | 14 +++++++ 6 files changed, 91 insertions(+), 3 deletions(-) create mode 100644 NzbDrone.Host/Owin/NlogTextWriter.cs create mode 100644 NzbDrone.Host/Owin/OwinServiceProvider.cs create mode 100644 NzbDrone.Host/Owin/OwinTraceOutputFactory.cs 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.Core.Datastore; using NzbDrone.Core.Organizer; using NzbDrone.Core.RootFolders; +using NzbDrone.Host.Owin; namespace NzbDrone.Host { @@ -24,6 +26,7 @@ private MainAppContainerBuilder(StartupArguments args) 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 @@ public class OwinHostController : IHostController { 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 @@ public void StartServer() _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