Skip to content

Commit 25f982d

Browse files
authored
aspnet-request-endpoint-name - EndPoint Metadata Name (#1102)
1 parent 8aa0ea1 commit 25f982d

4 files changed

Lines changed: 76 additions & 0 deletions

File tree

src/NLog.Web.AspNetCore/Internal/AssemblyExtensionTypes.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ public static void RegisterTypes(this NLog.Config.ISetupExtensionsBuilder setupB
112112
setupBuilder.RegisterLayoutRenderer<NLog.Web.LayoutRenderers.AspNetRequestServerVariableLayoutRenderer>("aspnet-request-servervariable");
113113
setupBuilder.RegisterLayoutRenderer<NLog.Web.LayoutRenderers.AspNetRequestEndPointLayoutRenderer>("aspnet-request-endpoint");
114114
setupBuilder.RegisterLayoutRenderer<NLog.Web.LayoutRenderers.AspNetRequestEndPointGroupLayoutRenderer>("aspnet-request-endpoint-group");
115+
setupBuilder.RegisterLayoutRenderer<NLog.Web.LayoutRenderers.AspNetRequestEndPointNameLayoutRenderer>("aspnet-request-endpoint-name");
115116
#endif
116117

117118
#pragma warning restore CS0618 // Type or member is obsolete

src/NLog.Web.AspNetCore/Internal/AssemblyExtensionTypes.tt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@ namespace NLog.Web.Internal
128128
setupBuilder.RegisterLayoutRenderer<NLog.Web.LayoutRenderers.AspNetRequestServerVariableLayoutRenderer>("aspnet-request-servervariable");
129129
setupBuilder.RegisterLayoutRenderer<NLog.Web.LayoutRenderers.AspNetRequestEndPointLayoutRenderer>("aspnet-request-endpoint");
130130
setupBuilder.RegisterLayoutRenderer<NLog.Web.LayoutRenderers.AspNetRequestEndPointGroupLayoutRenderer>("aspnet-request-endpoint-group");
131+
setupBuilder.RegisterLayoutRenderer<NLog.Web.LayoutRenderers.AspNetRequestEndPointNameLayoutRenderer>("aspnet-request-endpoint-name");
131132
#endif
132133

133134
#pragma warning restore CS0618 // Type or member is obsolete
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
#if NETCOREAPP3_0_OR_GREATER
2+
3+
using System;
4+
using System.Text;
5+
using NLog.LayoutRenderers;
6+
using NLog.Web.Internal;
7+
8+
namespace NLog.Web.LayoutRenderers
9+
{
10+
/// <summary>
11+
/// ASP.NET request EndPoint Name. Metadata-attribute assigned by WithName or [EndpointName]
12+
/// </summary>
13+
/// <remarks>
14+
/// <code>${aspnet-request-endpoint-name}</code>
15+
/// </remarks>
16+
/// <seealso href="https://github.com/NLog/NLog/wiki/AspNet-Request-EndPoint-Name-Layout-Renderer">Documentation on NLog Wiki</seealso>
17+
[LayoutRenderer("aspnet-request-endpoint-name")]
18+
public class AspNetRequestEndPointNameLayoutRenderer : AspNetLayoutRendererBase
19+
{
20+
/// <inheritdoc/>
21+
protected override void Append(StringBuilder builder, LogEventInfo logEvent)
22+
{
23+
var endPoint = HttpContextAccessor?.HttpContext.TryGetFeature<Microsoft.AspNetCore.Http.Features.IEndpointFeature>()?.Endpoint;
24+
var endPointGroup = endPoint?.Metadata.GetMetadata<Microsoft.AspNetCore.Routing.EndpointNameMetadata>();
25+
builder.Append(endPointGroup?.EndpointName);
26+
}
27+
}
28+
}
29+
30+
#endif
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
#if NETCOREAPP3_0_OR_GREATER
2+
using NLog.Web.LayoutRenderers;
3+
using Microsoft.AspNetCore.Connections.Features;
4+
using Microsoft.AspNetCore.Http.Features;
5+
using NSubstitute;
6+
using Xunit;
7+
8+
namespace NLog.Web.Tests.LayoutRenderers
9+
{
10+
public class AspNetRequestEndPointNameLayoutRendererTests : LayoutRenderersTestBase<AspNetRequestEndPointNameLayoutRenderer>
11+
{
12+
[Fact]
13+
public void SuccessTest()
14+
{
15+
// Arrange
16+
var (renderer, httpContext) = CreateWithHttpContext();
17+
var endPointFeature = Substitute.For<IEndpointFeature>();
18+
var endPointMetaData = new Microsoft.AspNetCore.Http.EndpointMetadataCollection(new Microsoft.AspNetCore.Routing.EndpointNameMetadata("42"));
19+
endPointFeature.Endpoint.Returns(new Microsoft.AspNetCore.Http.Endpoint(null, endPointMetaData, "DisplayName"));
20+
21+
var featureCollection = new FeatureCollection();
22+
featureCollection.Set<IEndpointFeature>(endPointFeature);
23+
24+
httpContext.Features.Returns(featureCollection);
25+
// Act
26+
var result = renderer.Render(new LogEventInfo());
27+
// Assert
28+
Assert.Equal("42", result);
29+
}
30+
31+
[Fact]
32+
public void NullTest()
33+
{
34+
// Arrange
35+
var (renderer, httpContext) = CreateWithHttpContext();
36+
httpContext.Features.Returns(new FeatureCollection());
37+
// Act
38+
var result = renderer.Render(new LogEventInfo());
39+
// Assert
40+
Assert.Equal(string.Empty, result);
41+
}
42+
}
43+
}
44+
#endif

0 commit comments

Comments
 (0)