From f6ed903ef5e6eb1b6cb1f5a3cbac170d67aef5e9 Mon Sep 17 00:00:00 2001 From: KZ Date: Sun, 19 Jul 2015 22:31:36 +0100 Subject: [PATCH] Add logging --- src/Jackett.Console/Jackett.Console.csproj | 7 ++- src/Jackett.Console/Program.cs | 18 +++++--- src/Jackett.Console/packages.config | 1 + src/Jackett.Service/Jackett.Service.csproj | 3 ++ src/Jackett.Service/packages.config | 1 + src/Jackett/Engine.cs | 12 +++++ src/Jackett/Jackett.csproj | 5 ++ src/Jackett/Startup.cs | 13 ++++++ src/Jackett/Utils/WebAPIRequestLogger.cs | 36 +++++++++++++++ src/Jackett/Utils/WebAPIToNLogTracer.cs | 53 ++++++++++++++++++++++ src/Jackett/packages.config | 1 + 11 files changed, 143 insertions(+), 7 deletions(-) create mode 100644 src/Jackett/Utils/WebAPIRequestLogger.cs create mode 100644 src/Jackett/Utils/WebAPIToNLogTracer.cs diff --git a/src/Jackett.Console/Jackett.Console.csproj b/src/Jackett.Console/Jackett.Console.csproj index c170cf8f5..bee0ab1f5 100644 --- a/src/Jackett.Console/Jackett.Console.csproj +++ b/src/Jackett.Console/Jackett.Console.csproj @@ -99,6 +99,9 @@ ..\packages\Microsoft.AspNet.WebApi.Owin.5.2.3\lib\net45\System.Web.Http.Owin.dll True + + ..\packages\Microsoft.AspNet.WebApi.Tracing.5.2.3\lib\net45\System.Web.Http.Tracing.dll + @@ -112,7 +115,9 @@ - + + Designer + diff --git a/src/Jackett.Console/Program.cs b/src/Jackett.Console/Program.cs index dc2adfe43..6f6973c79 100644 --- a/src/Jackett.Console/Program.cs +++ b/src/Jackett.Console/Program.cs @@ -18,23 +18,29 @@ namespace JackettConsole { try { - if (args.Length > 0) + foreach (var arg in args) { - switch (args[0].ToLowerInvariant()) + switch (arg.ToLowerInvariant()) { - case "/i": // install + case "/i": // Install Engine.ServiceConfig.Install(); return; - case "/r": // reserve port/url & install + case "/r": // Reserve port/url & install Engine.Server.ReserveUrls(doInstall: true); return; - case "/c": // change port + case "/c": // Change port Engine.Server.ReserveUrls(doInstall: false); return; - case "/u": // uninstall + case "/u": // Uninstall Engine.Server.ReserveUrls(doInstall: false); Engine.ServiceConfig.Uninstall(); return; + case "/l": // Logging + Engine.LogRequests = true; + break; + case "/t": // Tracing + Engine.TracingEnabled = true; + break; } } diff --git a/src/Jackett.Console/packages.config b/src/Jackett.Console/packages.config index 90c9bc1e4..66bccb817 100644 --- a/src/Jackett.Console/packages.config +++ b/src/Jackett.Console/packages.config @@ -8,6 +8,7 @@ + diff --git a/src/Jackett.Service/Jackett.Service.csproj b/src/Jackett.Service/Jackett.Service.csproj index bf2fb9a88..a4c6c9940 100644 --- a/src/Jackett.Service/Jackett.Service.csproj +++ b/src/Jackett.Service/Jackett.Service.csproj @@ -95,6 +95,9 @@ False ..\packages\Microsoft.AspNet.WebApi.Owin.5.2.3\lib\net45\System.Web.Http.Owin.dll + + ..\packages\Microsoft.AspNet.WebApi.Tracing.5.2.3\lib\net45\System.Web.Http.Tracing.dll + diff --git a/src/Jackett.Service/packages.config b/src/Jackett.Service/packages.config index c44eef52e..cfb04dcec 100644 --- a/src/Jackett.Service/packages.config +++ b/src/Jackett.Service/packages.config @@ -8,6 +8,7 @@ + diff --git a/src/Jackett/Engine.cs b/src/Jackett/Engine.cs index 7fffd41a8..d2b7172fa 100644 --- a/src/Jackett/Engine.cs +++ b/src/Jackett/Engine.cs @@ -31,6 +31,18 @@ namespace Jackett Logger.Info("Starting Jackett " + ConfigService.GetVersion()); } + public static bool TracingEnabled + { + get; + set; + } + + public static bool LogRequests + { + get; + set; + } + public static IContainer GetContainer() { return container; diff --git a/src/Jackett/Jackett.csproj b/src/Jackett/Jackett.csproj index 62925484a..43fa6adbc 100644 --- a/src/Jackett/Jackett.csproj +++ b/src/Jackett/Jackett.csproj @@ -121,6 +121,9 @@ ..\packages\Microsoft.AspNet.WebApi.Owin.5.2.3\lib\net45\System.Web.Http.Owin.dll True + + ..\packages\Microsoft.AspNet.WebApi.Tracing.5.2.3\lib\net45\System.Web.Http.Tracing.dll + @@ -199,6 +202,8 @@ + + diff --git a/src/Jackett/Startup.cs b/src/Jackett/Startup.cs index 40a8a2b72..917f86d7b 100644 --- a/src/Jackett/Startup.cs +++ b/src/Jackett/Startup.cs @@ -13,6 +13,8 @@ using Microsoft.Owin.StaticFiles; using Microsoft.Owin.FileSystems; using Autofac; using Jackett.Services; +using System.Web.Http.Tracing; +using Jackett.Utils; [assembly: OwinStartup(typeof(Startup))] namespace Jackett @@ -23,6 +25,17 @@ namespace Jackett { // Configure Web API for self-host. var config = new HttpConfiguration(); + // Setup tracing if enabled + if (Engine.TracingEnabled) + { + config.EnableSystemDiagnosticsTracing(); + config.Services.Replace(typeof(ITraceWriter), new WebAPIToNLogTracer()); + } + // Add request logging if enabled + if (Engine.LogRequests) + { + config.MessageHandlers.Add(new WebAPIRequestLogger()); + } config.DependencyResolver = new AutofacWebApiDependencyResolver(Engine.GetContainer()); config.MapHttpAttributeRoutes(); diff --git a/src/Jackett/Utils/WebAPIRequestLogger.cs b/src/Jackett/Utils/WebAPIRequestLogger.cs new file mode 100644 index 000000000..19c2cd124 --- /dev/null +++ b/src/Jackett/Utils/WebAPIRequestLogger.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Net.Http; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace Jackett.Utils +{ + class WebAPIRequestLogger : DelegatingHandler + { + protected override async Task SendAsync( + HttpRequestMessage request, CancellationToken cancellationToken) + { + //logging request body + string requestBody = await request.Content.ReadAsStringAsync(); + Trace.WriteLine(requestBody); + Engine.Logger.Debug(request.Method + ": " + request.RequestUri); + Engine.Logger.Debug("Body: " + requestBody); + + //let other handlers process the request + return await base.SendAsync(request, cancellationToken) + .ContinueWith(task => + { + //once response is ready, log it + var responseBody = task.Result.Content.ReadAsStringAsync().Result; + Trace.WriteLine(responseBody); + Engine.Logger.Debug("Response: " + responseBody); + + return task.Result; + }); + } + } +} diff --git a/src/Jackett/Utils/WebAPIToNLogTracer.cs b/src/Jackett/Utils/WebAPIToNLogTracer.cs new file mode 100644 index 000000000..810bc60ec --- /dev/null +++ b/src/Jackett/Utils/WebAPIToNLogTracer.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net.Http; +using System.Text; +using System.Threading.Tasks; +using System.Web.Http.Tracing; + +namespace Jackett.Utils +{ + public class WebAPIToNLogTracer : ITraceWriter + { + public void Trace(HttpRequestMessage request, string category, TraceLevel level, + Action traceAction) + { + if (Engine.TracingEnabled) + { + TraceRecord rec = new TraceRecord(request, category, level); + traceAction(rec); + WriteTrace(rec); + } + } + + protected void WriteTrace(TraceRecord rec) + { + var message = string.Format("{0} {1} {2}", rec.Operator, rec.Operation, rec.Message); + switch (rec.Level) + { + case TraceLevel.Debug: + Engine.Logger.Debug(message); + break; + case TraceLevel.Error: + Engine.Logger.Error(message); + break; + case TraceLevel.Fatal: + Engine.Logger.Fatal(message); + break; + case TraceLevel.Info: + Engine.Logger.Info(message); + break; + case TraceLevel.Off: + // Do nothing? + break; + case TraceLevel.Warn: + Engine.Logger.Warn(message); + break; + + } + + System.Diagnostics.Trace.WriteLine(message, rec.Category); + } + } +} diff --git a/src/Jackett/packages.config b/src/Jackett/packages.config index a4f77e87c..6447c9edc 100644 --- a/src/Jackett/packages.config +++ b/src/Jackett/packages.config @@ -10,6 +10,7 @@ +