Remove Logging dependency from the http parser (#1780)

* Remove Logging dependency from the http parser
This commit is contained in:
David Fowler 2017-04-27 08:46:08 -07:00 committed by GitHub
parent c2f15fcac3
commit 0755495ce5
9 changed files with 19 additions and 15 deletions

View File

@ -5,18 +5,21 @@ using System.Runtime.CompilerServices;
using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure; using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure;
using Microsoft.AspNetCore.Server.Kestrel.Internal.System; using Microsoft.AspNetCore.Server.Kestrel.Internal.System;
using Microsoft.AspNetCore.Server.Kestrel.Internal.System.IO.Pipelines; using Microsoft.AspNetCore.Server.Kestrel.Internal.System.IO.Pipelines;
using Microsoft.Extensions.Logging;
namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
{ {
public class HttpParser<TRequestHandler> : IHttpParser<TRequestHandler> where TRequestHandler : IHttpHeadersHandler, IHttpRequestLineHandler public class HttpParser<TRequestHandler> : IHttpParser<TRequestHandler> where TRequestHandler : IHttpHeadersHandler, IHttpRequestLineHandler
{ {
public HttpParser(IKestrelTrace log) private bool _showErrorDetails;
public HttpParser() : this(showErrorDetails: true)
{ {
Log = log;
} }
private IKestrelTrace Log { get; } public HttpParser(bool showErrorDetails)
{
_showErrorDetails = showErrorDetails;
}
// byte types don't have a data type annotation so we pre-cast them; to avoid in-place casts // byte types don't have a data type annotation so we pre-cast them; to avoid in-place casts
private const byte ByteCR = (byte)'\r'; private const byte ByteCR = (byte)'\r';
@ -488,7 +491,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
private unsafe BadHttpRequestException GetInvalidRequestException(RequestRejectionReason reason, byte* detail, int length) private unsafe BadHttpRequestException GetInvalidRequestException(RequestRejectionReason reason, byte* detail, int length)
=> BadHttpRequestException.GetException( => BadHttpRequestException.GetException(
reason, reason,
Log.IsEnabled(LogLevel.Information) _showErrorDetails
? new Span<byte>(detail, length).GetAsciiStringEscaped(Constants.MaxExceptionDetailSize) ? new Span<byte>(detail, length).GetAsciiStringEscaped(Constants.MaxExceptionDetailSize)
: string.Empty); : string.Empty);
} }

View File

@ -91,7 +91,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core
return new ServiceContext return new ServiceContext
{ {
Log = trace, Log = trace,
HttpParserFactory = frameParser => new HttpParser<FrameAdapter>(frameParser.Frame.ServiceContext.Log), HttpParserFactory = frameParser => new HttpParser<FrameAdapter>(frameParser.Frame.ServiceContext.Log.IsEnabled(LogLevel.Information)),
ThreadPool = threadPool, ThreadPool = threadPool,
SystemClock = systemClock, SystemClock = systemClock,
DateHeaderValueManager = dateHeaderValueManager, DateHeaderValueManager = dateHeaderValueManager,
@ -207,4 +207,4 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core
} }
} }
} }
} }

View File

@ -417,7 +417,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests
Assert.Equal(buffer.End, examined); Assert.Equal(buffer.End, examined);
} }
private IHttpParser<RequestHandler> CreateParser(IKestrelTrace log) => new HttpParser<RequestHandler>(log); private IHttpParser<RequestHandler> CreateParser(IKestrelTrace log) => new HttpParser<RequestHandler>(log.IsEnabled(LogLevel.Information));
public static IEnumerable<string[]> RequestLineValidData => HttpParsingData.RequestLineValidData; public static IEnumerable<string[]> RequestLineValidData => HttpParsingData.RequestLineValidData;
@ -463,4 +463,4 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests
} }
} }
} }
} }

View File

@ -94,7 +94,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Performance
DateHeaderValueManager = new DateHeaderValueManager(), DateHeaderValueManager = new DateHeaderValueManager(),
ServerOptions = new KestrelServerOptions(), ServerOptions = new KestrelServerOptions(),
Log = new MockTrace(), Log = new MockTrace(),
HttpParserFactory = f => new HttpParser<FrameAdapter>(log: null) HttpParserFactory = f => new HttpParser<FrameAdapter>()
}; };
var frameContext = new FrameContext var frameContext = new FrameContext
{ {

View File

@ -12,7 +12,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Performance
public class KestrelHttpParserBenchmark : IHttpRequestLineHandler, IHttpHeadersHandler public class KestrelHttpParserBenchmark : IHttpRequestLineHandler, IHttpHeadersHandler
{ {
private readonly HttpParser<Adapter> _parser = new HttpParser<Adapter>(log: null); private readonly HttpParser<Adapter> _parser = new HttpParser<Adapter>();
private ReadableBuffer _buffer; private ReadableBuffer _buffer;

View File

@ -24,7 +24,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Performance
{ {
var serviceContext = new ServiceContext var serviceContext = new ServiceContext
{ {
HttpParserFactory = f => new HttpParser<FrameAdapter>(f.Frame.ServiceContext.Log), HttpParserFactory = f => new HttpParser<FrameAdapter>(),
ServerOptions = new KestrelServerOptions() ServerOptions = new KestrelServerOptions()
}; };
var frameContext = new FrameContext var frameContext = new FrameContext

View File

@ -170,7 +170,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Performance
{ {
var serviceContext = new ServiceContext var serviceContext = new ServiceContext
{ {
HttpParserFactory = f => new HttpParser<FrameAdapter>(f.Frame.ServiceContext.Log), HttpParserFactory = f => new HttpParser<FrameAdapter>(),
ServerOptions = new KestrelServerOptions() ServerOptions = new KestrelServerOptions()
}; };
var frameContext = new FrameContext var frameContext = new FrameContext

View File

@ -120,7 +120,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Performance
DateHeaderValueManager = new DateHeaderValueManager(), DateHeaderValueManager = new DateHeaderValueManager(),
ServerOptions = new KestrelServerOptions(), ServerOptions = new KestrelServerOptions(),
Log = new MockTrace(), Log = new MockTrace(),
HttpParserFactory = f => new HttpParser<FrameAdapter>(log: null) HttpParserFactory = f => new HttpParser<FrameAdapter>()
}; };
var frameContext = new FrameContext var frameContext = new FrameContext

View File

@ -5,6 +5,7 @@ using Microsoft.AspNetCore.Server.Kestrel.Core;
using Microsoft.AspNetCore.Server.Kestrel.Core.Internal; using Microsoft.AspNetCore.Server.Kestrel.Core.Internal;
using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http; using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http;
using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure; using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure;
using Microsoft.Extensions.Logging;
namespace Microsoft.AspNetCore.Testing namespace Microsoft.AspNetCore.Testing
{ {
@ -20,7 +21,7 @@ namespace Microsoft.AspNetCore.Testing
DateHeaderValueManager = new DateHeaderValueManager(SystemClock); DateHeaderValueManager = new DateHeaderValueManager(SystemClock);
ConnectionManager = new FrameConnectionManager(Log); ConnectionManager = new FrameConnectionManager(Log);
DateHeaderValue = DateHeaderValueManager.GetDateHeaderValues().String; DateHeaderValue = DateHeaderValueManager.GetDateHeaderValues().String;
HttpParserFactory = frameAdapter => new HttpParser<FrameAdapter>(frameAdapter.Frame.ServiceContext.Log); HttpParserFactory = frameAdapter => new HttpParser<FrameAdapter>(frameAdapter.Frame.ServiceContext.Log.IsEnabled(LogLevel.Information));
ServerOptions = new KestrelServerOptions ServerOptions = new KestrelServerOptions
{ {
AddServerHeader = false AddServerHeader = false