This is the C# library for collecting EventSource with opentelemetry
add Unofficial.OpenTelemetry.Collector.EventSource to your nuget package reference.
available version is listed in nuget project page
if you want to add your EventSource, you should use UseEventSource(this TracerBuilder builder, EventSource ev, EventLevel level) or
UseEventSource(this TracerBuilder builder, IEnumerable<KeyValuePair<EventSource, EventLevel>> events)
sample code is here
// using System.Diagnostics.Tracing;
// using OpenTelemetry.Trace;
// using OpenTelemetry.Trace.Configuration;
// "YourEventSource.Log" is static readonly instance of your custom EventSource.
using(var factory = TracerFactory.Create(builder =>
{
builder.UseEventSource(YourEventSource.Log, EventLevel.Always);
// add your exporter...
}))
{
// ...
}if you want to add Framework's EventSource(like "System.Runtime", or another EventSource you cannot get instance directly),
set EventSourceCollectorOption.IsEnableFunc and pass in UseEventSource.
sample code is here
// using System.Diagnostics.Tracing;
// using OpenTelemetry.Trace;
// using OpenTelemetry.Trace.Configuration;
// "YourEventSource.Log" is static readonly instance of your custom EventSource.
using(var factory = TracerFactory.Create(builder =>
{
builder.UseEventSource(EventSourceCollectorOption.Create().SetIsEnableFunc(src =>
{
// if System.Threading.Tasks.TplEventSource enabled, stackoverflow error may be occured when creating span
if(!src.Name != "System.Threading.Tasks.TplEventSource")
{
Console.WriteLine($"{src.Name} enabled");
return (true, new EventEnableOption());
}
else
{
Console.WriteLine($"{src.Name} ignored");
return (false, default);
}
}));
// add your exporter...
}))
{
// ...
}- define your eventsource, ex:
- do
OpenTelemetry.Trace.Configuration.TracerBuilderExtensions.UseEventSourcewith your TracerBuilder instance(this is extension method)
Add UseEventSource(EventSourceCollectorOption) for collecting framework events.
First release