Improve logging behavior for actions scope

This commit is contained in:
Ryan Nowak 2015-10-22 11:10:35 -07:00
parent dcec94f6d9
commit f2af02b1cb
4 changed files with 53 additions and 3 deletions

View File

@ -8,7 +8,7 @@ using Microsoft.AspNet.Mvc.Abstractions;
namespace Microsoft.AspNet.Mvc.Controllers
{
[DebuggerDisplay("CA {DisplayName}(RC-{RouteConstraints.Count})")]
[DebuggerDisplay("{DisplayName}")]
public class ControllerActionDescriptor : ActionDescriptor
{
public string ControllerName { get; set; }

View File

@ -8,6 +8,7 @@ using Microsoft.AspNet.Http;
using Microsoft.AspNet.Mvc.Abstractions;
using Microsoft.AspNet.Mvc.Core;
using Microsoft.AspNet.Mvc.Internal;
using Microsoft.AspNet.Mvc.Logging;
using Microsoft.AspNet.Mvc.Routing;
using Microsoft.AspNet.Routing;
using Microsoft.Extensions.DependencyInjection;
@ -91,7 +92,7 @@ namespace Microsoft.AspNet.Mvc.Infrastructure
new { actionDescriptor, httpContext = context.HttpContext, routeData = context.RouteData });
}
using (_logger.BeginScope("ActionId: {ActionId}", actionDescriptor.Id))
using (_logger.ActionScope(actionDescriptor))
{
_logger.LogVerbose("Executing action {ActionDisplayName}", actionDescriptor.DisplayName);

View File

@ -0,0 +1,49 @@
// 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 System;
using System.Collections.Generic;
using Microsoft.AspNet.Mvc.Abstractions;
using Microsoft.Extensions.Logging;
namespace Microsoft.AspNet.Mvc.Logging
{
internal static class MvcRouteHandlerLoggerExtensions
{
public static IDisposable ActionScope(this ILogger logger, ActionDescriptor action)
{
return logger.BeginScopeImpl(new ActionLogScope(action));
}
private class ActionLogScope : ILogValues
{
private readonly ActionDescriptor _action;
public ActionLogScope(ActionDescriptor action)
{
if (action == null)
{
throw new ArgumentNullException(nameof(action));
}
_action = action;
}
public IEnumerable<KeyValuePair<string, object>> GetValues()
{
return new KeyValuePair<string, object>[]
{
new KeyValuePair<string, object>("ActionId", _action.Id),
new KeyValuePair<string, object>("ActionName", _action.DisplayName),
};
}
public override string ToString()
{
// We don't include the _action.Id here because it's just an opaque guid, and if
// you have text logging, you can already use the requestId for correlation.
return _action.DisplayName;
}
}
}
}

View File

@ -38,7 +38,7 @@ namespace Microsoft.AspNet.Mvc.Infrastructure
// Assert
Assert.Single(sink.Scopes);
Assert.StartsWith("ActionId: ", sink.Scopes[0].Scope?.ToString());
Assert.Equal(displayName, sink.Scopes[0].Scope?.ToString());
Assert.Single(sink.Writes);
Assert.Equal(expectedMessage, sink.Writes[0].State?.ToString());
}