Kit.Core/LibExternal/Npgsql/NpgsqlSqlEventSource.cs

30 lines
1.1 KiB
C#

using System.Diagnostics.Tracing;
using System.Runtime.CompilerServices;
namespace Npgsql;
sealed class NpgsqlSqlEventSource : EventSource
{
public static readonly NpgsqlSqlEventSource Log = new();
const string EventSourceName = "Npgsql.Sql";
const int CommandStartId = 3;
const int CommandStopId = 4;
internal NpgsqlSqlEventSource() : base(EventSourceName) {}
// NOTE
// - The 'Start' and 'Stop' suffixes on the following event names have special meaning in EventSource. They
// enable creating 'activities'.
// For more information, take a look at the following blog post:
// https://blogs.msdn.microsoft.com/vancem/2015/09/14/exploring-eventsource-activity-correlation-and-causation-features/
// - A stop event's event id must be next one after its start event.
[Event(CommandStartId, Level = EventLevel.Informational)]
public void CommandStart(string sql) => Log.WriteEvent(CommandStartId, sql);
[MethodImpl(MethodImplOptions.NoInlining)]
[Event(CommandStopId, Level = EventLevel.Informational)]
public void CommandStop() => Log.WriteEvent(CommandStopId);
}