代码使用Console Trace Provider。但是,在函数 static void MakeActivity(string name) 中, ActivitySource.startActivity 行返回 null。我该如何解决它?
谷歌上的示例有“using”关键字,我无法将其应用于与我的项目 ID 绑定的 .net 4.7。
/// <summary>
/// Starts up the OpenTelemetry and JeagerTracing connection
/// </summary>
using OpenTelemetry;
using OpenTelemetry.Resources;
using OpenTelemetry.Trace;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace UnitTestProject1
{
class Program
{
private static ResourceBuilder BackendServiceResource { get; set; }
private static readonly ActivitySource ActivitySource = new ActivitySource("Sample.DistributedTracing");
private static readonly string serveradress = "127.0.0.1";
private static readonly int serverPort = 6831;
public static TracerProvider Provider { get; set; }
public static Tracer OpenTelemetryTracer { get; set; }
static void Main(string[] args)
{
var serviceName = "MyCompany.MyProduct.MyService";
var serviceVersion = "1.0.0";
Provider = GetConsoleTraceProvider(serviceName, serviceVersion);
OpenTelemetryTracer = Provider.GetTracer(ActivitySource.Name);
MakeActivity("Test 1");
MakeActivity("Test 2");
MakeActivity("Test 3");
MakeActivity("Test 4");
MakeActivity("Test 5");
}
static void MakeActivity(string name)
{
Activity activity = ActivitySource.StartActivity(name); // this returns null even though i have a trace provider setup using GetConsoleTraceProvider
activity.AddTag("machine.name", Environment.MachineName);
activity.AddTag("user.name", Environment.UserName);
Task.Delay(5000);
activity.Stop();
}
public static TracerProvider GetConsoleTraceProvider(string serviceName,string serviceVersion)
{
// Configure important OpenTelemetry settings and the console exporter
var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddSource(serviceName)
.SetResourceBuilder(
ResourceBuilder.CreateDefault()
.AddService(serviceName: serviceName, serviceVersion: serviceVersion))
.AddConsoleExporter()
.Build();
return tracerProvider;
}
}
}
此代码示例与我使用 c# 10 功能一样有效。
using System.Diagnostics;
using OpenTelemetry;
using OpenTelemetry.Trace;
using OpenTelemetry.Resources;
using OpenTelemetry.Exporter;
// Define some important constants and the activity source
var serviceName = "MyCompany.MyProduct.MyService";
var serviceVersion = "1.0.0";
// Configure important OpenTelemetry settings and the console exporter
using var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddSource(serviceName)
.SetResourceBuilder(
ResourceBuilder.CreateDefault()
.AddService(serviceName: serviceName, serviceVersion: serviceVersion))
.AddConsoleExporter()
.Build();
var MyActivitySource = new ActivitySource(serviceName);
using var activity = MyActivitySource.StartActivity("SayHello");
activity?.SetTag("foo", 1);
activity?.SetTag("bar", "Hello, World!");
activity?.SetTag("baz", new int[] { 1, 2, 3 });
由于某种原因,它需要 AddSource() 来跟踪工作