src/Elastic.Apm.NLog/ApmSpanIdLayoutRenderer.cs (17 lines of code) (raw):
using System.Text;
using NLog;
using NLog.Config;
using NLog.LayoutRenderers;
namespace Elastic.Apm.NLog;
/// <summary>
/// Provides ElasticApmSpanId as special logging variable to render the current Elastic APM Span Id
/// </summary>
[LayoutRenderer(Name)]
[ThreadSafe]
public class ApmSpanIdLayoutRenderer : LayoutRenderer
{
/// <summary>
/// ElasticApmSpanId - the variable to use to inject into your logs
/// </summary>
public const string Name = "ElasticApmSpanId";
/// <inheritdoc cref="LayoutRenderer.Append"/>
protected override void Append(StringBuilder builder, LogEventInfo logEvent)
{
if (!Agent.IsConfigured) return;
if (!Agent.Config.Enabled) return;
builder.Append(Agent.Tracer?.CurrentSpan?.Id);
}
}