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 @@
+