private TelemetryItem RunLoggerTest(Action <ILogger <TelemetryItemTests> > testScenario) { // SETUP var mockTransmitter = new MockTransmitter(); var processor = new BatchExportProcessor <LogRecord>(new AzureMonitorLogExporter( options: new AzureMonitorExporterOptions { ConnectionString = EmptyConnectionString, }, transmitter: mockTransmitter)); var serviceCollection = new ServiceCollection().AddLogging(builder => { builder.SetMinimumLevel(LogLevel.Trace) .AddOpenTelemetry(options => options .AddProcessor(processor)); }); using var serviceProvider = serviceCollection.BuildServiceProvider(); var logger = serviceProvider.GetRequiredService <ILogger <TelemetryItemTests> >(); // ACT testScenario(logger); // CLEANUP processor.ForceFlush(); Assert.True(mockTransmitter.TelemetryItems.Any(), "test project did not capture telemetry"); return(mockTransmitter.TelemetryItems.Single()); }
private TelemetryItem RunActivityTest(Action <ActivitySource> testScenario) { // SETUP var ActivitySourceName = "MyCompany.MyProduct.MyLibrary"; using var activitySource = new ActivitySource(ActivitySourceName); var transmitter = new MockTransmitter(); var processor = new BatchExportProcessor <Activity>(new AzureMonitorTraceExporter( options: new AzureMonitorExporterOptions { ConnectionString = EmptyConnectionString, }, transmitter: transmitter)); Sdk.CreateTracerProviderBuilder() .SetSampler(new AlwaysOnSampler()) .AddSource(ActivitySourceName) .AddProcessor(processor) .Build(); // ACT testScenario(activitySource); // CLEANUP processor.ForceFlush(); //Task.Delay(100).Wait(); //TODO: HOW TO REMOVE THIS WAIT? Assert.True(transmitter.TelemetryItems.Any(), "test project did not capture telemetry"); return(transmitter.TelemetryItems.Single()); }
public void VerifyLoggerWithActivity() { // SETUP var ActivitySourceName = $"{nameof(TelemetryItemTests)}.{nameof(VerifyLoggerWithActivity)}"; using var activitySource = new ActivitySource(ActivitySourceName); var mockTransmitter = new MockTransmitter(); var processor1 = new BatchActivityExportProcessor(new AzureMonitorTraceExporter(mockTransmitter)); var processor2 = new BatchLogRecordExportProcessor(new AzureMonitorLogExporter(mockTransmitter)); using var tracerProvider = Sdk.CreateTracerProviderBuilder() .SetSampler(new AlwaysOnSampler()) .AddSource(ActivitySourceName) .AddProcessor(processor1) .Build(); var serviceCollection = new ServiceCollection().AddLogging(builder => { builder.SetMinimumLevel(LogLevel.Trace) .AddOpenTelemetry(options => options .AddProcessor(processor2)); }); using var serviceProvider = serviceCollection.BuildServiceProvider(); var logger = serviceProvider.GetRequiredService <ILogger <TelemetryItemTests> >(); // ACT using (var activity = activitySource.StartActivity(name: "test activity", kind: ActivityKind.Server)) { activity.SetTag("message", "hello activity!"); logger.LogWarning("hello ilogger"); } // CLEANUP processor1.ForceFlush(); processor2.ForceFlush(); // VERIFY Assert.True(mockTransmitter.TelemetryItems.Any(), "test project did not capture telemetry"); Assert.Equal(2, mockTransmitter.TelemetryItems.Count); var logTelemetry = mockTransmitter.TelemetryItems.Single(x => x.Name == "Message"); var activityTelemetry = mockTransmitter.TelemetryItems.Single(x => x.Name == "Request"); var activityId = ((RequestData)activityTelemetry.Data.BaseData).Id; var operationId = activityTelemetry.Tags["ai.operation.id"]; Assert.Equal(activityId, logTelemetry.Tags["ai.operation.parentId"]); Assert.Equal(operationId, logTelemetry.Tags["ai.operation.id"]); }
// TODO: ADD THIS TEST AFTER IMPLEMENTING ILOGGER EXPORTER //public void VerifyILoggerAsTelemetryItem private void Setup(out BatchExportProcessor <Activity> processor, out MockTransmitter transmitter) { transmitter = new MockTransmitter(); processor = new BatchExportProcessor <Activity>(new AzureMonitorTraceExporter( options: new AzureMonitorExporterOptions { ConnectionString = EmptyConnectionString, }, transmitter: transmitter)); Sdk.CreateTracerProviderBuilder() .SetSampler(new AlwaysOnSampler()) .AddSource(ActivitySourceName) .AddProcessor(processor) .Build(); }