diff --git a/eng/PatchConfig.props b/eng/PatchConfig.props
index 29e74d4f858b207d5b449839823caa14c2408603..9afa0e2572f5b5a751ae8156ab4b379635fa3dd3 100644
--- a/eng/PatchConfig.props
+++ b/eng/PatchConfig.props
@@ -28,6 +28,8 @@ Later on, this will be checked using this condition:
   </PropertyGroup>
   <PropertyGroup Condition=" '$(VersionPrefix)' == '2.1.11' ">
     <PackagesInPatch>
+      Microsoft.AspNetCore.Mvc.Core;
+      Microsoft.AspNetCore.Mvc.RazorPages;
     </PackagesInPatch>
   </PropertyGroup>
 
diff --git a/src/Mvc/Mvc.Core/src/Internal/MvcCoreLoggerExtensions.cs b/src/Mvc/Mvc.Core/src/Internal/MvcCoreLoggerExtensions.cs
index c840f785b10b3b6e97a6898764acedebbb175d6f..7ce747f03fc0ee26c142aa50e82ac7e4d58c2365 100644
--- a/src/Mvc/Mvc.Core/src/Internal/MvcCoreLoggerExtensions.cs
+++ b/src/Mvc/Mvc.Core/src/Internal/MvcCoreLoggerExtensions.cs
@@ -32,6 +32,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal
         private static readonly double TimestampToTicks = TimeSpan.TicksPerSecond / (double)Stopwatch.Frequency;
 
         private static readonly Action<ILogger, string, string, Exception> _actionExecuting;
+        private static readonly Action<ILogger, string, MethodInfo, string, string, Exception> _controllerActionExecuting;
         private static readonly Action<ILogger, string, double, Exception> _actionExecuted;
 
         private static readonly Action<ILogger, string[], Exception> _challengeResultExecuting;
@@ -39,7 +40,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal
         private static readonly Action<ILogger, string, Exception> _contentResultExecuting;
 
         private static readonly Action<ILogger, string, ModelValidationState, Exception> _actionMethodExecuting;
-        private static readonly Action<ILogger, string, string[], ModelValidationState, Exception> _actionMethodExecutingWithArguments;
+        private static readonly Action<ILogger, string, string[], Exception> _actionMethodExecutingWithArguments;
         private static readonly Action<ILogger, string, string, double, Exception> _actionMethodExecuted;
 
         private static readonly Action<ILogger, string, string[], Exception> _logFilterExecutionPlan;
@@ -153,6 +154,11 @@ namespace Microsoft.AspNetCore.Mvc.Internal
                 1,
                 "Route matched with {RouteData}. Executing action {ActionName}");
 
+            _controllerActionExecuting = LoggerMessage.Define<string, MethodInfo, string, string>(
+                LogLevel.Information,
+                3,
+                "Route matched with {RouteData}. Executing controller action with signature {MethodInfo} on controller {Controller} ({AssemblyName}).");
+
             _actionExecuted = LoggerMessage.Define<string, double>(
                 LogLevel.Information,
                 2,
@@ -173,10 +179,10 @@ namespace Microsoft.AspNetCore.Mvc.Internal
                 1,
                 "Executing action method {ActionName} - Validation state: {ValidationState}");
 
-            _actionMethodExecutingWithArguments = LoggerMessage.Define<string, string[], ModelValidationState>(
-                LogLevel.Information,
-                1,
-                "Executing action method {ActionName} with arguments ({Arguments}) - Validation state: {ValidationState}");
+            _actionMethodExecutingWithArguments = LoggerMessage.Define<string, string[]>(
+                LogLevel.Trace,
+                3,
+                "Executing action method {ActionName} with arguments ({Arguments})");
 
             _actionMethodExecuted = LoggerMessage.Define<string, string, double>(
                 LogLevel.Information,
@@ -683,7 +689,22 @@ namespace Microsoft.AspNetCore.Mvc.Internal
                     }
                 }
 
-                _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 @@ namespace Microsoft.AspNetCore.Mvc.Internal
                 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 a5d7c960d48c6fe328ebb5c3b76303d1819e834b..fcca656b9d48cbd4bc9542c4bffc1da3bb05a5e0 100644
--- a/src/Mvc/Mvc.RazorPages/src/Internal/PageLoggerExtensions.cs
+++ b/src/Mvc/Mvc.RazorPages/src/Internal/PageLoggerExtensions.cs
@@ -15,7 +15,8 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
     {
         public const string PageFilter = "Page Filter";
 
-        private static readonly Action<ILogger, string, string[], ModelValidationState, Exception> _handlerMethodExecuting;
+        private static readonly Action<ILogger, string, ModelValidationState, Exception> _handlerMethodExecuting;
+        private static readonly Action<ILogger, string, string[], Exception> _handlerMethodExecutingWithArguments;
         private static readonly Action<ILogger, string, string, Exception> _handlerMethodExecuted;
         private static readonly Action<ILogger, object, Exception> _pageFilterShortCircuit;
         private static readonly Action<ILogger, string, string[], Exception> _malformedPageDirective;
@@ -28,10 +29,15 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
         {
             // These numbers start at 101 intentionally to avoid conflict with the IDs used by ResourceInvoker.
 
-            _handlerMethodExecuting = LoggerMessage.Define<string, string[], ModelValidationState>(
+            _handlerMethodExecuting = LoggerMessage.Define<string, ModelValidationState>(
                 LogLevel.Information,
                 101,
-                "Executing handler method {HandlerName} with arguments ({Arguments}) - ModelState is {ValidationState}");
+                "Executing handler method {HandlerName} - ModelState is {ValidationState}");
+
+            _handlerMethodExecutingWithArguments = LoggerMessage.Define<string, string[]>(
+                LogLevel.Trace,
+                103,
+                "Executing handler method {HandlerName} with arguments ({Arguments})");
 
             _handlerMethodExecuted = LoggerMessage.Define<string, string>(
                 LogLevel.Debug,
@@ -75,23 +81,19 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
             {
                 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);
+                }
             }
         }