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")]