Skip to content

Commit 8aa0ea1

Browse files
authored
aspnet-request-endpoint-group - EndPoint Metadata Group DisplayName (#1101)
1 parent 5e200c4 commit 8aa0ea1

6 files changed

Lines changed: 77 additions & 2 deletions

File tree

examples/ASP.NET.Core8/nlog.config

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
<!-- File Target for own log messages with extra web details using some ASP.NET core renderers -->
2121
<target xsi:type="File" name="ownFile-web" fileName="c:\temp\nlog-AspNetCore8-own-${shortdate}.log"
22-
layout="${longdate}|${event-properties:item=EventId:whenEmpty=0}|${level:uppercase=true}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}" />
22+
layout="${longdate}|${event-properties:item=EventId:whenEmpty=0}|${level:uppercase=true}|${logger}|${message} ${exception:format=tostring}|endpoint: ${aspnet-request-endpoint}|url: ${aspnet-request-url}" />
2323

2424
<!--Console Target for hosting lifetime messages to improve Docker / Visual Studio startup detection -->
2525
<target xsi:type="Console" name="lifetimeConsole" layout="${MicrosoftConsoleLayout}" />

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ public static void RegisterTypes(this NLog.Config.ISetupExtensionsBuilder setupB
111111
setupBuilder.RegisterLayoutRenderer<NLog.Web.LayoutRenderers.AspNetResponseHttpsCompressionLayoutRenderer>("aspnet-response-https-compression");
112112
setupBuilder.RegisterLayoutRenderer<NLog.Web.LayoutRenderers.AspNetRequestServerVariableLayoutRenderer>("aspnet-request-servervariable");
113113
setupBuilder.RegisterLayoutRenderer<NLog.Web.LayoutRenderers.AspNetRequestEndPointLayoutRenderer>("aspnet-request-endpoint");
114+
setupBuilder.RegisterLayoutRenderer<NLog.Web.LayoutRenderers.AspNetRequestEndPointGroupLayoutRenderer>("aspnet-request-endpoint-group");
114115
#endif
115116

116117
#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
@@ -127,6 +127,7 @@ namespace NLog.Web.Internal
127127
setupBuilder.RegisterLayoutRenderer<NLog.Web.LayoutRenderers.AspNetResponseHttpsCompressionLayoutRenderer>("aspnet-response-https-compression");
128128
setupBuilder.RegisterLayoutRenderer<NLog.Web.LayoutRenderers.AspNetRequestServerVariableLayoutRenderer>("aspnet-request-servervariable");
129129
setupBuilder.RegisterLayoutRenderer<NLog.Web.LayoutRenderers.AspNetRequestEndPointLayoutRenderer>("aspnet-request-endpoint");
130+
setupBuilder.RegisterLayoutRenderer<NLog.Web.LayoutRenderers.AspNetRequestEndPointGroupLayoutRenderer>("aspnet-request-endpoint-group");
130131
#endif
131132

132133
#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 Group DisplayName. Metadata-attribute assigned by WithGroupName or [EndpointGroupName]
12+
/// </summary>
13+
/// <remarks>
14+
/// <code>${aspnet-request-endpoint-group}</code>
15+
/// </remarks>
16+
/// <seealso href="https://github.com/NLog/NLog/wiki/AspNet-Request-EndPoint-Group-Layout-Renderer">Documentation on NLog Wiki</seealso>
17+
[LayoutRenderer("aspnet-request-endpoint-group")]
18+
public class AspNetRequestEndPointGroupLayoutRenderer : 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.EndpointGroupNameAttribute>();
25+
builder.Append(endPointGroup?.EndpointGroupName);
26+
}
27+
}
28+
}
29+
30+
#endif

src/NLog.Web.AspNetCore/LayoutRenderers/AspNetRequestEndPointLayoutRenderer.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,5 +26,4 @@ protected override void Append(StringBuilder builder, LogEventInfo logEvent)
2626
}
2727
}
2828

29-
3029
#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 AspNetRequestEndPointGroupLayoutRendererTests : LayoutRenderersTestBase<AspNetRequestEndPointGroupLayoutRenderer>
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.EndpointGroupNameAttribute("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)