From 51dec02187f642d99f1c41e188495d8d9902792f Mon Sep 17 00:00:00 2001 From: John Luo Date: Wed, 20 Jan 2016 15:15:14 -0800 Subject: [PATCH] Log request and response headers --- .../Http/Frame.cs | 59 +++++++++++++++++++ .../Http/FrameOfT.cs | 5 ++ .../Http/FrameRequestHeaders.cs | 2 +- 3 files changed, 65 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.AspNet.Server.Kestrel/Http/Frame.cs b/src/Microsoft.AspNet.Server.Kestrel/Http/Frame.cs index efbd159c7..ed71e19eb 100644 --- a/src/Microsoft.AspNet.Server.Kestrel/Http/Frame.cs +++ b/src/Microsoft.AspNet.Server.Kestrel/Http/Frame.cs @@ -318,6 +318,59 @@ public void Abort() /// public abstract Task RequestProcessingAsync(); + public string RequestToString() + { + var requestBuilder = new StringBuilder("Received request: "); + + // GET /path?query HTTP/1.1 + requestBuilder.Append(Method); + requestBuilder.Append(" "); + requestBuilder.Append(PathBase); + requestBuilder.Append(Path); + requestBuilder.Append(QueryString); + requestBuilder.Append(" "); + requestBuilder.Append(HttpVersion); + requestBuilder.Append("; Headers: { "); + + foreach (var header in RequestHeaders) + { + foreach (var value in header.Value) + { + requestBuilder.Append(header.Key); + requestBuilder.Append(": "); + requestBuilder.Append(value); + requestBuilder.Append("; "); + } + } + requestBuilder.Append("}"); + return requestBuilder.ToString(); + } + + public string ResponseToString() + { + // HTTP/1.1 200 OK + var responseBuilder = new StringBuilder("Sending response: "); + responseBuilder.Append(HttpVersion); + responseBuilder.Append(" "); + responseBuilder.Append(StatusCode); + responseBuilder.Append(" "); + responseBuilder.Append(ReasonPhrase); + responseBuilder.Append("; Headers: { "); + + foreach (var header in ResponseHeaders) + { + foreach (var value in header.Value) + { + responseBuilder.Append(header.Key); + responseBuilder.Append(": "); + responseBuilder.Append(value); + responseBuilder.Append("; "); + } + } + responseBuilder.Append("}"); + return responseBuilder.ToString(); + } + public void OnStarting(Func callback, object state) { lock (_onStartingSync) @@ -655,6 +708,12 @@ private Task CreateResponseHeader( end.CopyFrom(_httpVersion == HttpVersionType.Http1_1 ? _bytesHttpVersion1_1 : _bytesHttpVersion1_0); end.CopyFrom(statusBytes); + + if (Log.IsEnabled(LogLevel.Debug)) + { + Log.LogDebug(ResponseToString()); + } + _responseHeaders.CopyTo(ref end); end.CopyFrom(_bytesEndHeaders, 0, _bytesEndHeaders.Length); diff --git a/src/Microsoft.AspNet.Server.Kestrel/Http/FrameOfT.cs b/src/Microsoft.AspNet.Server.Kestrel/Http/FrameOfT.cs index 32b067fc7..723b7b415 100644 --- a/src/Microsoft.AspNet.Server.Kestrel/Http/FrameOfT.cs +++ b/src/Microsoft.AspNet.Server.Kestrel/Http/FrameOfT.cs @@ -62,6 +62,11 @@ public override async Task RequestProcessingAsync() if (!_requestProcessingStopping) { + if (Log.IsEnabled(LogLevel.Debug)) + { + Log.LogDebug(RequestToString()); + } + var messageBody = MessageBody.For(HttpVersion, _requestHeaders, this); _keepAlive = messageBody.RequestKeepAlive; diff --git a/src/Microsoft.AspNet.Server.Kestrel/Http/FrameRequestHeaders.cs b/src/Microsoft.AspNet.Server.Kestrel/Http/FrameRequestHeaders.cs index 731b44946..3144c376f 100644 --- a/src/Microsoft.AspNet.Server.Kestrel/Http/FrameRequestHeaders.cs +++ b/src/Microsoft.AspNet.Server.Kestrel/Http/FrameRequestHeaders.cs @@ -1,9 +1,9 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -using Microsoft.Extensions.Primitives; using System.Collections; using System.Collections.Generic; +using Microsoft.Extensions.Primitives; namespace Microsoft.AspNet.Server.Kestrel.Http {