diff --git a/eng/PatchConfig.props b/eng/PatchConfig.props index 29e74d4f858b..9afa0e2572f5 100644 --- a/eng/PatchConfig.props +++ b/eng/PatchConfig.props @@ -28,6 +28,8 @@ Later on, this will be checked using this condition: + Microsoft.AspNetCore.Mvc.Core; + Microsoft.AspNetCore.Mvc.RazorPages; diff --git a/src/Mvc/Mvc.Core/src/Internal/MvcCoreLoggerExtensions.cs b/src/Mvc/Mvc.Core/src/Internal/MvcCoreLoggerExtensions.cs index c840f785b10b..7ce747f03fc0 100644 --- a/src/Mvc/Mvc.Core/src/Internal/MvcCoreLoggerExtensions.cs +++ b/src/Mvc/Mvc.Core/src/Internal/MvcCoreLoggerExtensions.cs @@ -32,6 +32,7 @@ internal static class MvcCoreLoggerExtensions private static readonly double TimestampToTicks = TimeSpan.TicksPerSecond / (double)Stopwatch.Frequency; private static readonly Action _actionExecuting; + private static readonly Action _controllerActionExecuting; private static readonly Action _actionExecuted; private static readonly Action _challengeResultExecuting; @@ -39,7 +40,7 @@ internal static class MvcCoreLoggerExtensions private static readonly Action _contentResultExecuting; private static readonly Action _actionMethodExecuting; - private static readonly Action _actionMethodExecutingWithArguments; + private static readonly Action _actionMethodExecutingWithArguments; private static readonly Action _actionMethodExecuted; private static readonly Action _logFilterExecutionPlan; @@ -153,6 +154,11 @@ static MvcCoreLoggerExtensions() 1, "Route matched with {RouteData}. Executing action {ActionName}"); + _controllerActionExecuting = LoggerMessage.Define( + LogLevel.Information, + 3, + "Route matched with {RouteData}. Executing controller action with signature {MethodInfo} on controller {Controller} ({AssemblyName})."); + _actionExecuted = LoggerMessage.Define( LogLevel.Information, 2, @@ -173,10 +179,10 @@ static MvcCoreLoggerExtensions() 1, "Executing action method {ActionName} - Validation state: {ValidationState}"); - _actionMethodExecutingWithArguments = LoggerMessage.Define( - LogLevel.Information, - 1, - "Executing action method {ActionName} with arguments ({Arguments}) - Validation state: {ValidationState}"); + _actionMethodExecutingWithArguments = LoggerMessage.Define( + LogLevel.Trace, + 3, + "Executing action method {ActionName} with arguments ({Arguments})"); _actionMethodExecuted = LoggerMessage.Define( LogLevel.Information, @@ -683,7 +689,22 @@ public static void ExecutingAction(this ILogger logger, ActionDescriptor action) } } - _actionExecuting(logger, stringBuilder.ToString(), action.DisplayName, null); + if (action is ControllerActionDescriptor controllerActionDescriptor) + { + var controllerType = controllerActionDescriptor.ControllerTypeInfo.AsType(); + var controllerName = TypeNameHelper.GetTypeDisplayName(controllerType); + _controllerActionExecuting( + logger, + stringBuilder.ToString(), + controllerActionDescriptor.MethodInfo, + controllerName, + controllerType.Assembly.GetName().Name, + null); + } + else + { + _actionExecuting(logger, stringBuilder.ToString(), action.DisplayName, null); + } } } @@ -814,21 +835,17 @@ public static void ActionMethodExecuting(this ILogger logger, ControllerContext var actionName = context.ActionDescriptor.DisplayName; var validationState = context.ModelState.ValidationState; + _actionMethodExecuting(logger, actionName, validationState, null); - string[] convertedArguments; - if (arguments == null) - { - _actionMethodExecuting(logger, actionName, validationState, null); - } - else + if (arguments != null && logger.IsEnabled(LogLevel.Trace)) { - convertedArguments = new string[arguments.Length]; + var convertedArguments = new string[arguments.Length]; for (var i = 0; i < arguments.Length; i++) { convertedArguments[i] = Convert.ToString(arguments[i]); } - _actionMethodExecutingWithArguments(logger, actionName, convertedArguments, validationState, null); + _actionMethodExecutingWithArguments(logger, actionName, convertedArguments, null); } } } diff --git a/src/Mvc/Mvc.RazorPages/src/Internal/PageLoggerExtensions.cs b/src/Mvc/Mvc.RazorPages/src/Internal/PageLoggerExtensions.cs index a5d7c960d48c..fcca656b9d48 100644 --- a/src/Mvc/Mvc.RazorPages/src/Internal/PageLoggerExtensions.cs +++ b/src/Mvc/Mvc.RazorPages/src/Internal/PageLoggerExtensions.cs @@ -15,7 +15,8 @@ internal static class PageLoggerExtensions { public const string PageFilter = "Page Filter"; - private static readonly Action _handlerMethodExecuting; + private static readonly Action _handlerMethodExecuting; + private static readonly Action _handlerMethodExecutingWithArguments; private static readonly Action _handlerMethodExecuted; private static readonly Action _pageFilterShortCircuit; private static readonly Action _malformedPageDirective; @@ -28,10 +29,15 @@ static PageLoggerExtensions() { // These numbers start at 101 intentionally to avoid conflict with the IDs used by ResourceInvoker. - _handlerMethodExecuting = LoggerMessage.Define( + _handlerMethodExecuting = LoggerMessage.Define( LogLevel.Information, 101, - "Executing handler method {HandlerName} with arguments ({Arguments}) - ModelState is {ValidationState}"); + "Executing handler method {HandlerName} - ModelState is {ValidationState}"); + + _handlerMethodExecutingWithArguments = LoggerMessage.Define( + LogLevel.Trace, + 103, + "Executing handler method {HandlerName} with arguments ({Arguments})"); _handlerMethodExecuted = LoggerMessage.Define( LogLevel.Debug, @@ -75,23 +81,19 @@ public static void ExecutingHandlerMethod(this ILogger logger, PageContext conte { var handlerName = handler.MethodInfo.Name; - string[] convertedArguments; - if (arguments == null) - { - convertedArguments = null; - } - else + var validationState = context.ModelState.ValidationState; + _handlerMethodExecuting(logger, handlerName, validationState, null); + + if (arguments != null && logger.IsEnabled(LogLevel.Trace)) { - convertedArguments = new string[arguments.Length]; + var convertedArguments = new string[arguments.Length]; for (var i = 0; i < arguments.Length; i++) { convertedArguments[i] = Convert.ToString(arguments[i]); } - } - var validationState = context.ModelState.ValidationState; - - _handlerMethodExecuting(logger, handlerName, convertedArguments, validationState, null); + _handlerMethodExecutingWithArguments(logger, handlerName, convertedArguments, null); + } } }