Add logging

This commit is contained in:
KZ
2015-07-19 22:31:36 +01:00
parent eaa4d0eb04
commit f6ed903ef5
11 changed files with 143 additions and 7 deletions

View File

@@ -99,6 +99,9 @@
<HintPath>..\packages\Microsoft.AspNet.WebApi.Owin.5.2.3\lib\net45\System.Web.Http.Owin.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System.Web.Http.Tracing">
<HintPath>..\packages\Microsoft.AspNet.WebApi.Tracing.5.2.3\lib\net45\System.Web.Http.Tracing.dll</HintPath>
</Reference>
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
@@ -112,7 +115,9 @@
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
<None Include="packages.config" />
<None Include="packages.config">
<SubType>Designer</SubType>
</None>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\CurlSharp\CurlSharp.csproj">

View File

@@ -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;
}
}

View File

@@ -8,6 +8,7 @@
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net452" userInstalled="true" />
<package id="Microsoft.AspNet.WebApi.Owin" version="5.2.3" targetFramework="net452" userInstalled="true" />
<package id="Microsoft.AspNet.WebApi.OwinSelfHost" version="5.2.3" targetFramework="net452" userInstalled="true" />
<package id="Microsoft.AspNet.WebApi.Tracing" version="5.2.3" targetFramework="net452" />
<package id="Microsoft.Owin" version="3.0.1" targetFramework="net452" userInstalled="true" />
<package id="Microsoft.Owin.FileSystems" version="3.0.1" targetFramework="net452" userInstalled="true" />
<package id="Microsoft.Owin.Host.HttpListener" version="2.0.2" targetFramework="net452" userInstalled="true" />

View File

@@ -95,6 +95,9 @@
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\Microsoft.AspNet.WebApi.Owin.5.2.3\lib\net45\System.Web.Http.Owin.dll</HintPath>
</Reference>
<Reference Include="System.Web.Http.Tracing">
<HintPath>..\packages\Microsoft.AspNet.WebApi.Tracing.5.2.3\lib\net45\System.Web.Http.Tracing.dll</HintPath>
</Reference>
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />

View File

@@ -8,6 +8,7 @@
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net452" />
<package id="Microsoft.AspNet.WebApi.Owin" version="5.2.3" targetFramework="net452" />
<package id="Microsoft.AspNet.WebApi.OwinSelfHost" version="5.2.3" targetFramework="net452" />
<package id="Microsoft.AspNet.WebApi.Tracing" version="5.2.3" targetFramework="net452" />
<package id="Microsoft.Owin" version="3.0.1" targetFramework="net452" />
<package id="Microsoft.Owin.FileSystems" version="3.0.1" targetFramework="net452" />
<package id="Microsoft.Owin.Host.HttpListener" version="3.0.1" targetFramework="net452" />

View File

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

View File

@@ -121,6 +121,9 @@
<HintPath>..\packages\Microsoft.AspNet.WebApi.Owin.5.2.3\lib\net45\System.Web.Http.Owin.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System.Web.Http.Tracing">
<HintPath>..\packages\Microsoft.AspNet.WebApi.Tracing.5.2.3\lib\net45\System.Web.Http.Tracing.dll</HintPath>
</Reference>
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
@@ -199,6 +202,8 @@
<Compile Include="CurlHelper.cs" />
<Compile Include="Indexers\AlphaRatio.cs" />
<Compile Include="Utils\StringUtil.cs" />
<Compile Include="Utils\WebAPIRequestLogger.cs" />
<Compile Include="Utils\WebAPIToNLogTracer.cs" />
</ItemGroup>
<ItemGroup>
<None Include="App.config" />

View File

@@ -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();

View File

@@ -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<HttpResponseMessage> 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;
});
}
}
}

View File

@@ -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<TraceRecord> 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);
}
}
}

View File

@@ -10,6 +10,7 @@
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net451" userInstalled="true" />
<package id="Microsoft.AspNet.WebApi.Owin" version="5.2.3" targetFramework="net451" userInstalled="true" />
<package id="Microsoft.AspNet.WebApi.OwinSelfHost" version="5.2.3" targetFramework="net451" userInstalled="true" />
<package id="Microsoft.AspNet.WebApi.Tracing" version="5.2.3" targetFramework="net451" />
<package id="Microsoft.Owin" version="3.0.1" targetFramework="net451" userInstalled="true" />
<package id="Microsoft.Owin.FileSystems" version="3.0.1" targetFramework="net451" userInstalled="true" />
<package id="Microsoft.Owin.Host.HttpListener" version="2.0.2" targetFramework="net451" userInstalled="true" />