From 9db92dc6a7bfc22a62ff12053244201c38390da5 Mon Sep 17 00:00:00 2001 From: Charlie Daly Date: Mon, 4 Sep 2017 10:09:17 +0100 Subject: [PATCH] JsonResultExecuter logs type of result. - MvcJsonLoggerExtensions.JsonResultExecuting logs result type instead of value - Nulls handled more elegantly. - Two tests added to JsonResultExecutorTests.cs. - #4604 --- .../Internal/MvcJsonLoggerExtensions.cs | 5 +- .../Internal/JsonResultExecutorTest.cs | 52 ++++++++++++++++++- 2 files changed, 53 insertions(+), 4 deletions(-) diff --git a/src/Microsoft.AspNetCore.Mvc.Formatters.Json/Internal/MvcJsonLoggerExtensions.cs b/src/Microsoft.AspNetCore.Mvc.Formatters.Json/Internal/MvcJsonLoggerExtensions.cs index 8936571c26..9710dc2955 100644 --- a/src/Microsoft.AspNetCore.Mvc.Formatters.Json/Internal/MvcJsonLoggerExtensions.cs +++ b/src/Microsoft.AspNetCore.Mvc.Formatters.Json/Internal/MvcJsonLoggerExtensions.cs @@ -22,7 +22,7 @@ namespace Microsoft.AspNetCore.Mvc.Formatters.Json.Internal _jsonResultExecuting = LoggerMessage.Define( LogLevel.Information, 1, - "Executing JsonResult, writing value {Value}."); + "Executing JsonResult, writing value type {Value}."); } public static void JsonInputException(this ILogger logger, Exception exception) @@ -32,7 +32,8 @@ namespace Microsoft.AspNetCore.Mvc.Formatters.Json.Internal public static void JsonResultExecuting(this ILogger logger, object value) { - _jsonResultExecuting(logger, Convert.ToString(value), null); + var stringValue = value == null ? "null" : Convert.ToString(value.GetType()); + _jsonResultExecuting(logger, stringValue, null); } } } diff --git a/test/Microsoft.AspNetCore.Mvc.Formatters.Json.Test/Internal/JsonResultExecutorTest.cs b/test/Microsoft.AspNetCore.Mvc.Formatters.Json.Test/Internal/JsonResultExecutorTest.cs index aa32faad36..df0a805fa0 100644 --- a/test/Microsoft.AspNetCore.Mvc.Formatters.Json.Test/Internal/JsonResultExecutorTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.Formatters.Json.Test/Internal/JsonResultExecutorTest.cs @@ -182,11 +182,45 @@ namespace Microsoft.AspNetCore.Mvc.Formatters.Json.Internal Assert.Equal(expected, written); } - private static JsonResultExecutor CreateExcutor() + [Fact] + public async Task ExecuteAsync_NonNullResult_LogsResultType() + { + // Arrange + var expected = "Executing JsonResult, writing value type System.String."; + var context = GetActionContext(); + var logger = new StubLogger(); + var executer = CreateExcutor(logger); + var result = new JsonResult("result_value"); + + // Act + await executer.ExecuteAsync(context, result); + + // Assert + Assert.Equal(expected, logger.MostRecentMessage); + } + + [Fact] + public async Task ExecuteAsync_NullResult_LogsNull() + { + // Arrange + var expected = "Executing JsonResult, writing value type null."; + var context = GetActionContext(); + var logger = new StubLogger(); + var executer = CreateExcutor(logger); + var result = new JsonResult(null); + + // Act + await executer.ExecuteAsync(context, result); + + // Assert + Assert.Equal(expected, logger.MostRecentMessage); + } + + private static JsonResultExecutor CreateExcutor(ILogger logger = null) { return new JsonResultExecutor( new TestHttpResponseStreamWriterFactory(), - NullLogger.Instance, + logger ?? NullLogger.Instance, new TestOptionsManager(), ArrayPool.Shared); } @@ -226,5 +260,19 @@ namespace Microsoft.AspNetCore.Mvc.Formatters.Json.Internal } } } + + private class StubLogger : ILogger + { + public string MostRecentMessage { get; private set; } + + public IDisposable BeginScope(TState state) => throw new NotImplementedException(); + + public bool IsEnabled(LogLevel logLevel) => true; + + public void Log(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func formatter) + { + MostRecentMessage = formatter(state, exception); + } + } } }