![]() |
VOOZH | about |
dotnet add package NLog.DiagnosticSource --version 6.0.3
NuGet\Install-Package NLog.DiagnosticSource -Version 6.0.3
<PackageReference Include="NLog.DiagnosticSource" Version="6.0.3" />
<PackageVersion Include="NLog.DiagnosticSource" Version="6.0.3" />Directory.Packages.props
<PackageReference Include="NLog.DiagnosticSource" />Project file
paket add NLog.DiagnosticSource --version 6.0.3
#r "nuget: NLog.DiagnosticSource, 6.0.3"
#:package NLog.DiagnosticSource@6.0.3
#addin nuget:?package=NLog.DiagnosticSource&version=6.0.3Install as a Cake Addin
#tool nuget:?package=NLog.DiagnosticSource&version=6.0.3Install as a Cake Tool
NLog ActivityTraceLayoutRenderer for Microsoft Activity Trace
NLog DiagnosticListenerTarget for Microsoft DiagnosticSource
Install the package
Install-Package NLog.DiagnosticSource or in your csproj:
<PackageReference Include="NLog.DiagnosticSource" Version="6.*" />
Add to your nlog.config:
<extensions>
<add assembly="NLog.DiagnosticSource"/>
</extensions>
Alternative register from code using fluent configuration API:
LogManager.Setup().SetupExtensions(ext => {
ext.RegisterTarget<NLog.Targets.DiagnosticListenerTarget>();
ext.RegisterLayoutRenderer<NLog.LayoutRenderers.ActivityTraceLayoutRenderer>();
});
The System.Diagnostics.Activity.Current from Microsoft allows one to create OpenTelemetry spans.
Example of NLog.config file that outputs span-details together with LogEvent by using ${activity}:
<nlog>
<extensions>
<add assembly="NLog.DiagnosticSource"/>
</extensions>
<targets>
<target name="console" xsi:type="console" layout="${message}|ActivityId=${activity:property=TraceId}" />
</targets>
<rules>
<logger minLevel="Info" writeTo="console" />
</rules>
</nlog>
Property Enum Values
Format="@" for json-dictionary)Format="@" for json-dictionary)Format="@" for json-array)format="d"format="d"Ok or Error). For int-value combine with format="d"0 or 1)Formatting
${activity:property=Baggage:item=BaggageKey}${activity:property=Tags:item=TagKey}${activity:property=CustomProperty:item=PropertyKey}Extract property values from parent or root
It is possible to specify that the above property should be extracted from either root- or parent-activity.
${activity:property=OperationName:parent=true}
${activity:property=OperationName:root=true}
Manually configure ActivityTrackingOptions
When using the default HostBuilder then it will automatically setup the following ActivityTrackingOptions:
builder.ConfigureLogging((hostingContext, loggingBuilder) =>
{
loggingBuilder.Configure(options =>
{
options.ActivityTrackingOptions = ActivityTrackingOptions.SpanId
| ActivityTrackingOptions.TraceId
| ActivityTrackingOptions.ParentId;
});
}).
If creating a custom HostBuilder, then one have to manually setup the ActivityTrackingOptions like shown above.
Example of NLog.config file that uses the diagnosticListener target:
<nlog>
<extensions>
<add assembly="NLog.DiagnosticSource"/>
</extensions>
<targets>
<target name="diagSource" xsi:type="diagnosticListener" layout="${message}" sourceName="nlog" eventName="${logger}" />
</targets>
<rules>
<logger minLevel="Info" writeTo="diagSource" />
</rules>
</nlog>
NLog v5.3.4 introduced support for Layout.FromMethod that returns typed NLog Layout<T>. This allows custom NLog Targets to resolve SpanId / TraceId with support for AsyncWrapper, without having to parse from string or depend on NLog.DiagnosticSource nuget-package:
public class MyCustomTarget : TargetWithContext
{
private static readonly string EmptyTraceIdToHexString = default(System.Diagnostics.ActivityTraceId).ToHexString();
private static readonly string EmptySpanIdToHexString = default(System.Diagnostics.ActivitySpanId).ToHexString();
public Layout<System.Diagnostics.ActivityTraceId?> TraceId { get; set; } = Layout<System.Diagnostics.ActivityTraceId?>.FromMethod(static evt => System.Diagnostics.Activity.Current?.TraceId is System.Diagnostics.ActivityTraceId activityTraceId && !ReferenceEquals(EmptyTraceIdToHexString, activityTraceId.ToHexString()) ? activityTraceId : null);
public Layout<System.Diagnostics.ActivitySpanId?> SpanId { get; set; } = Layout<System.Diagnostics.ActivitySpanId?>.FromMethod(static evt => System.Diagnostics.Activity.Current?.SpanId is System.Diagnostics.ActivitySpanId activitySpanId && !ReferenceEquals(EmptySpanIdToHexString, activitySpanId.ToHexString()) ? activitySpanId : null);
protected override void Write(LogEventInfo logEvent)
{
var spanId = RenderLogEvent(SpanId, logEvent);
if (spanId.HasValue)
data.SpanId = spanId.Value;
var traceId = RenderLogEvent(TraceId, logEvent);
if (traceId.HasValue)
data.TraceId = traceId.Value;
}
}
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 net5.0 was computed. net5.0-windows net5.0-windows was computed. net6.0 net6.0 is compatible. net6.0-android net6.0-android was computed. net6.0-ios net6.0-ios was computed. net6.0-maccatalyst net6.0-maccatalyst was computed. net6.0-macos net6.0-macos was computed. net6.0-tvos net6.0-tvos was computed. net6.0-windows net6.0-windows was computed. net7.0 net7.0 was computed. net7.0-android net7.0-android was computed. net7.0-ios net7.0-ios was computed. net7.0-maccatalyst net7.0-maccatalyst was computed. net7.0-macos net7.0-macos was computed. net7.0-tvos net7.0-tvos was computed. net7.0-windows net7.0-windows was computed. net8.0 net8.0 is compatible. net8.0-android net8.0-android was computed. net8.0-browser net8.0-browser was computed. net8.0-ios net8.0-ios was computed. net8.0-maccatalyst net8.0-maccatalyst was computed. net8.0-macos net8.0-macos was computed. net8.0-tvos net8.0-tvos was computed. net8.0-windows net8.0-windows was computed. net9.0 net9.0 was computed. net9.0-android net9.0-android was computed. net9.0-browser net9.0-browser was computed. net9.0-ios net9.0-ios was computed. net9.0-maccatalyst net9.0-maccatalyst was computed. net9.0-macos net9.0-macos was computed. net9.0-tvos net9.0-tvos was computed. net9.0-windows net9.0-windows was computed. net10.0 net10.0 is compatible. net10.0-android net10.0-android was computed. net10.0-browser net10.0-browser was computed. net10.0-ios net10.0-ios was computed. net10.0-maccatalyst net10.0-maccatalyst was computed. net10.0-macos net10.0-macos was computed. net10.0-tvos net10.0-tvos was computed. net10.0-windows net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 netcoreapp2.0 was computed. netcoreapp2.1 netcoreapp2.1 was computed. netcoreapp2.2 netcoreapp2.2 was computed. netcoreapp3.0 netcoreapp3.0 was computed. netcoreapp3.1 netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 netstandard2.0 is compatible. netstandard2.1 netstandard2.1 was computed. |
| .NET Framework | net461 net461 was computed. net462 net462 is compatible. net463 net463 was computed. net47 net47 was computed. net471 net471 was computed. net472 net472 was computed. net48 net48 was computed. net481 net481 was computed. |
| MonoAndroid | monoandroid monoandroid was computed. |
| MonoMac | monomac monomac was computed. |
| MonoTouch | monotouch monotouch was computed. |
| Tizen | tizen40 tizen40 was computed. tizen60 tizen60 was computed. |
| Xamarin.iOS | xamarinios xamarinios was computed. |
| Xamarin.Mac | xamarinmac xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos xamarinwatchos was computed. |
Showing the top 5 NuGet packages that depend on NLog.DiagnosticSource:
| Package | Downloads |
|---|---|
|
Ark.Tools.NLog
NLog configuration helper and extensions for Ark standard configuration using code and not config files. |
|
|
Ark.Tools.Solid
SOLID base for Handler pattern |
|
|
Ark.Tools.ResourceWatcher
Watcher over listable resources with support for change detection, retry limit and state. |
|
|
Ark.Tools.FtpClient.Core
Core abstractions for FtpClient |
|
|
Ark.Tools.Sql.SqlServer
Extensions and helpers of Ark.Tools.Sql for SqlServer |
Showing the top 1 popular GitHub repositories that depend on NLog.DiagnosticSource:
| Repository | Stars |
|---|---|
|
NLog/NLog
NLog - Flexible and Structured Logging for various .NET Platforms
|
| Version | Downloads | Last Updated |
|---|---|---|
| 6.0.3 | 411,932 | 11/14/2025 |
| 6.0.2 | 212,055 | 7/20/2025 |
| 6.0.1 | 24,622 | 6/28/2025 |
| 6.0.0 | 15,090 | 6/23/2025 |
| 5.2.3 | 414,285 | 6/15/2025 |
| 5.2.2 | 100,660 | 5/14/2025 |
| 5.2.1 | 2,523,872 | 1/28/2024 |
| 5.2.0 | 442,752 | 10/15/2023 |
| 5.0.0 | 1,086,513 | 11/22/2022 |
| 1.3.0 | 442,106 | 7/29/2022 |
| 1.2.0 | 507,644 | 9/28/2021 |
| 1.1.0 | 93,848 | 7/1/2021 |
| 1.0.2 | 155,264 | 3/10/2021 |
| 1.0.1 | 35,217 | 1/13/2021 |
| 1.0.0 | 18,140 | 1/7/2021 |
- Added NET10 targetframework
- Updated NLog v6.0.3
See https://github.com/NLog/NLog.DiagnosticSource for documentation of ${activity} and DiagnosticListenerTarget