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);
+ }
}
}