diff --git a/src/LibLog.Example.Library/LibLog.Example.Library.csproj b/src/LibLog.Example.Library/LibLog.Example.Library.csproj
index ac7e229..13d8bf6 100644
--- a/src/LibLog.Example.Library/LibLog.Example.Library.csproj
+++ b/src/LibLog.Example.Library/LibLog.Example.Library.csproj
@@ -10,6 +10,6 @@
TRACE;DEBUG;LIBLOG_PUBLIC
-
+
\ No newline at end of file
diff --git a/src/LibLog.Example.ProvidersOnly/LibLog.Example.ProvidersOnly.csproj b/src/LibLog.Example.ProvidersOnly/LibLog.Example.ProvidersOnly.csproj
index aefe8fe..2d87787 100644
--- a/src/LibLog.Example.ProvidersOnly/LibLog.Example.ProvidersOnly.csproj
+++ b/src/LibLog.Example.ProvidersOnly/LibLog.Example.ProvidersOnly.csproj
@@ -10,6 +10,6 @@
TRACE;LIBLOG_PROVIDERS_ONLY
-
+
\ No newline at end of file
diff --git a/src/LibLog.Tests/LogProviders/NLogLogProviderLoggingTests.cs b/src/LibLog.Tests/LogProviders/NLogLogProviderLoggingTests.cs
index 4722688..f7b6883 100644
--- a/src/LibLog.Tests/LogProviders/NLogLogProviderLoggingTests.cs
+++ b/src/LibLog.Tests/LogProviders/NLogLogProviderLoggingTests.cs
@@ -137,7 +137,6 @@ public void Can_open_mapped_diagnostics_context()
}
}
-#if NLOG4
[Fact]
public void Can_capture_callsite()
{
@@ -154,7 +153,6 @@ public void Can_capture_callsite()
_sut.Info(() => "c");
myTarget.Logs[myTarget.Logs.Count - 1].ShouldBe(string.Format("INFO|{0}.{1}|c|", GetType().FullName, nameof(Can_capture_callsite)));
}
-#endif
[Fact]
public void Can_open_mapped_diagnostics_context_destructured()
diff --git a/src/LibLog/LogProviders/NLogLogProvider.cs b/src/LibLog/LogProviders/NLogLogProvider.cs
index 1c97dcc..d10e2b5 100644
--- a/src/LibLog/LogProviders/NLogLogProvider.cs
+++ b/src/LibLog/LogProviders/NLogLogProvider.cs
@@ -34,22 +34,55 @@ public static bool IsLoggerAvailable()
protected override OpenNdc GetOpenNdcMethod()
{
+ var messageParam = Expression.Parameter(typeof(string), "message");
+
+ var ndlcContextType = Type.GetType("NLog.NestedDiagnosticsLogicalContext, NLog");
+ if (ndlcContextType != null)
+ {
+ var pushObjectMethod = ndlcContextType.GetMethod("PushObject", typeof(object));
+ if (pushObjectMethod != null)
+ {
+ var pushObjectMethodCall = Expression.Call(null, pushObjectMethod, messageParam);
+ return Expression.Lambda(pushObjectMethodCall, messageParam).Compile();
+ }
+ }
+
var ndcContextType = Type.GetType("NLog.NestedDiagnosticsContext, NLog");
var pushMethod = ndcContextType.GetMethod("Push", typeof(string));
- var messageParam = Expression.Parameter(typeof(string), "message");
+
var pushMethodCall = Expression.Call(null, pushMethod, messageParam);
return Expression.Lambda(pushMethodCall, messageParam).Compile();
}
protected override OpenMdc GetOpenMdcMethod()
{
- var mdcContextType = Type.GetType("NLog.MappedDiagnosticsContext, NLog");
+ var keyParam = Expression.Parameter(typeof(string), "key");
+ var ndlcContextType = Type.GetType("NLog.NestedDiagnosticsLogicalContext, NLog");
+ if (ndlcContextType != null)
+ {
+ var pushObjectMethod = ndlcContextType.GetMethod("PushObject", typeof(object));
+ if (pushObjectMethod != null)
+ {
+ var mdlcContextType = Type.GetType("NLog.MappedDiagnosticsLogicalContext, NLog");
+ if (mdlcContextType != null)
+ {
+ var setScopedMethod = mdlcContextType.GetMethod("SetScoped", typeof(string), typeof(object));
+ if (setScopedMethod != null)
+ {
+ var valueObjParam = Expression.Parameter(typeof(object), "value");
+ var setScopedMethodCall = Expression.Call(null, setScopedMethod, keyParam, valueObjParam);
+ var setMethodLambda = Expression.Lambda>(setScopedMethodCall, keyParam, valueObjParam).Compile();
+ return (key, value, _) => setMethodLambda(key, value);
+ }
+ }
+ }
+ }
+
+ var mdcContextType = Type.GetType("NLog.MappedDiagnosticsContext, NLog");
var setMethod = mdcContextType.GetMethod("Set", typeof(string), typeof(string));
var removeMethod = mdcContextType.GetMethod("Remove", typeof(string));
- var keyParam = Expression.Parameter(typeof(string), "key");
var valueParam = Expression.Parameter(typeof(string), "value");
-
var setMethodCall = Expression.Call(null, setMethod, keyParam, valueParam);
var removeMethodCall = Expression.Call(null, removeMethod, keyParam);