diff --git a/src/Elastic.CommonSchema.NLog/EcsLayout.cs b/src/Elastic.CommonSchema.NLog/EcsLayout.cs
index d37cf4b7..509c397f 100644
--- a/src/Elastic.CommonSchema.NLog/EcsLayout.cs
+++ b/src/Elastic.CommonSchema.NLog/EcsLayout.cs
@@ -33,7 +33,6 @@ public class EcsLayout : Layout
{
/// An NLOG layout implementation that renders logs as ECS json
public const string Name = nameof(EcsLayout);
- private static bool? _nlogApmLoaded;
private static Agent _defaultAgent;
private Agent _previousAgent;
private Service _previousService;
@@ -41,13 +40,6 @@ public class EcsLayout : Layout
private Server _previousServer;
private Process _previousProcess;
- private static bool NLogApmLoaded()
- {
- if (_nlogApmLoaded.HasValue) return _nlogApmLoaded.Value;
- _nlogApmLoaded = Type.GetType("Elastic.Apm.NLog.ApmTraceIdLayoutRenderer, Elastic.Apm.NLog") != null;
- return _nlogApmLoaded.Value;
- }
-
private readonly Layout _disableThreadAgnostic = "${threadid:cached=true}";
/// An NLOG layout implementation that renders logs as ECS json
@@ -76,7 +68,7 @@ public EcsLayout()
_defaultAgent = EcsDocument.CreateAgent(typeof(EcsLayout));
// These values are set by the Elastic.Apm.NLog package
- if (NLogApmLoaded())
+ if (NLogApmLoaded.Value)
{
ApmTraceId = "${ElasticApmTraceId}";
ApmTransactionId = "${ElasticApmTransactionId}";
@@ -96,7 +88,7 @@ protected override void InitializeLayout()
{
if (CanIncludeAspNetProperties())
{
- if (NLogWeb5Registered())
+ if (NLogWeb5Registered.Value)
EventDurationMs = "${aspnet-request-duration}";
HttpRequestId = "${aspnet-TraceIdentifier}";
@@ -112,18 +104,26 @@ protected override void InitializeLayout()
UrlQuery = "${aspnet-request-url:IncludeScheme=false:IncludeHost=false:IncludePath=false:IncludeQueryString=true}";
UrlUserName = "${aspnet-user-identity}";
- if (!NLogApmLoaded())
+ if (!NLogApmLoaded.Value)
ApmTraceId = "${scopeproperty:item=RequestId:whenEmpty=${aspnet-TraceIdentifier}}";
}
base.InitializeLayout();
}
- private static bool NLogWeb5Registered() =>
- ConfigurationItemFactory.Default.LayoutRenderers.TryGetDefinition("aspnet-request-duration", out _);
+ private static Lazy NLogApmLoaded { get; } = new Lazy(() => Type.GetType("Elastic.Apm.NLog.ApmTraceIdLayoutRenderer, Elastic.Apm.NLog") != null);
+
+#if NETFRAMEWORK
+ private static Lazy NLogWeb4Registered { get; } = new Lazy(() => Type.GetType("NLog.Web.LayoutRenderers.AspNetRequestCookieLayoutRenderer, NLog.Web") != null);
+#else
+ private static Lazy NLogWeb4Registered { get; } = new Lazy(() => Type.GetType("NLog.Web.LayoutRenderers.AspNetRequestCookieLayoutRenderer, NLog.Web.AspNetCore") != null);
+#endif
- private static bool NLogWeb4Registered() =>
- ConfigurationItemFactory.Default.LayoutRenderers.TryGetDefinition("aspnet-request-url", out _);
+#if NETFRAMEWORK
+ private static Lazy NLogWeb5Registered { get; } = new Lazy(() => Type.GetType("NLog.Web.LayoutRenderers.AspNetRequestDurationLayoutRenderer, NLog.Web") != null);
+#else
+ private static Lazy NLogWeb5Registered { get; } = new Lazy(() => Type.GetType("NLog.Web.LayoutRenderers.AspNetRequestDurationLayoutRenderer, NLog.Web.AspNetCore") != null);
+#endif
///
// ReSharper disable UnusedMember.Global
@@ -216,7 +216,7 @@ private static bool NLogWeb4Registered() =>
///
/// Tests if aspnet properties would be rendered
///
- public bool CanIncludeAspNetProperties() => IncludeAspNetProperties && NLogWeb4Registered();
+ public bool CanIncludeAspNetProperties() => IncludeAspNetProperties && NLogWeb4Registered.Value;
///
[ArrayParameter(typeof(TargetPropertyWithContext), "label")]