Skip to content

Commit 39935d6

Browse files
committed
simplify code example
1 parent 2d9d69a commit 39935d6

File tree

2 files changed

+56
-55
lines changed

2 files changed

+56
-55
lines changed

ReadMe.md

Lines changed: 27 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1190,21 +1190,12 @@ public class CommandTracingFilter(ConsoleAppFilter next) : ConsoleAppFilter(next
11901190
For visualization, if your solution includes a web application, using .NET Aspire would be convenient during development. For production environments, there are solutions like Datadog and New Relic, as well as OSS tools from Grafana Labs. However, especially for local development, I think OpenTelemetry native all-in-one solutions are convenient. Here, let's look at tracing using the OSS [SigNoz](https://signoz.io/).
11911191

11921192
```csharp
1193-
using ConsoleAppFramework;
1194-
using Microsoft.Extensions.DependencyInjection;
1195-
using Microsoft.Extensions.Hosting;
1196-
using Microsoft.Extensions.Logging;
1197-
using OpenTelemetry.Logs;
1198-
using OpenTelemetry.Metrics;
1199-
using OpenTelemetry.Resources;
1200-
using OpenTelemetry.Trace;
1201-
using System.Diagnostics;
1202-
12031193
// git clone https://github.com/SigNoz/signoz.git
12041194
// cd signoz/deploy/docker
12051195
// docker compose up
12061196
Environment.SetEnvironmentVariable("OTEL_EXPORTER_OTLP_ENDPOINT", "http://localhost:4317"); // 4317 or 4318
12071197
1198+
// crate builder from Microsoft.Extensions.Hosting.Host
12081199
var builder = Host.CreateApplicationBuilder(args);
12091200

12101201
builder.Logging.AddOpenTelemetry(logging =>
@@ -1214,55 +1205,58 @@ builder.Logging.AddOpenTelemetry(logging =>
12141205
});
12151206

12161207
builder.Services.AddOpenTelemetry()
1208+
.UseOtlpExporter()
12171209
.ConfigureResource(resource =>
12181210
{
12191211
resource.AddService("ConsoleAppFramework Telemetry Sample");
12201212
})
12211213
.WithMetrics(metrics =>
12221214
{
1215+
// configure for metrics
12231216
metrics.AddRuntimeInstrumentation()
1224-
.AddHttpClientInstrumentation()
1225-
.AddOtlpExporter();
1217+
.AddHttpClientInstrumentation();
12261218
})
12271219
.WithTracing(tracing =>
12281220
{
1221+
// configure for tracing
12291222
tracing.SetSampler(new AlwaysOnSampler())
12301223
.AddHttpClientInstrumentation()
1231-
.AddSource(ConsoleAppFrameworkSampleActivitySource.Name) // add trace source
1232-
.AddOtlpExporter();
1224+
.AddSource(ConsoleAppFrameworkSampleActivitySource.Name);
12331225
})
12341226
.WithLogging(logging =>
12351227
{
1236-
logging.AddOtlpExporter();
1228+
// configure for logging
12371229
});
12381230

12391231
var app = builder.ToConsoleAppBuilder();
12401232

1241-
var consoleAppLoger = ConsoleApp.ServiceProvider.GetRequiredService<ILogger<Program>>(); // already built service provider.
1242-
ConsoleApp.Log = msg => consoleAppLoger.LogDebug(msg);
1243-
ConsoleApp.LogError = msg => consoleAppLoger.LogError(msg);
1233+
app.Add<SampleCommand>();
12441234

1245-
app.UseFilter<CommandTracingFilter>(); // use root Trace filter
1235+
// setup filter
1236+
app.UseFilter<CommandTracingFilter>();
12461237

1247-
app.Add("", async ([FromServices] ILogger<Program> logger, CancellationToken cancellationToken) =>
1238+
await app.RunAsync(args); // Run
1239+
1240+
public class SampleCommand(ILogger<SampleCommand> logger)
12481241
{
1249-
using var httpClient = new HttpClient();
1250-
var ms = await httpClient.GetStringAsync("https://www.microsoft.com", cancellationToken);
1251-
logger.LogInformation(ms);
1252-
var google = await httpClient.GetStringAsync("https://www.google.com", cancellationToken);
1253-
logger.LogInformation(google);
1242+
[Command("")]
1243+
public async Task Run(CancellationToken cancellationToken)
1244+
{
1245+
using var httpClient = new HttpClient();
12541246

1255-
var ms2 = httpClient.GetStringAsync("https://www.microsoft.com", cancellationToken);
1256-
var google2 = httpClient.GetStringAsync("https://www.google.com", cancellationToken);
1257-
var apple2 = httpClient.GetStringAsync("https://www.apple.com", cancellationToken);
1258-
await Task.WhenAll(ms2, google2, apple2);
1247+
var ms = await httpClient.GetStringAsync("https://www.microsoft.com", cancellationToken);
1248+
var google = await httpClient.GetStringAsync("https://www.google.com", cancellationToken);
12591249

1260-
logger.LogInformation(apple2.Result);
1250+
logger.LogInformation("Sequential Query done.");
12611251

1262-
logger.LogInformation("OK");
1263-
});
1252+
var ms2 = httpClient.GetStringAsync("https://www.microsoft.com", cancellationToken);
1253+
var google2 = httpClient.GetStringAsync("https://www.google.com", cancellationToken);
1254+
var apple2 = httpClient.GetStringAsync("https://www.apple.com", cancellationToken);
1255+
await Task.WhenAll(ms2, google2, apple2);
12641256

1265-
await app.RunAsync(args); // Run
1257+
logger.LogInformation("Parallel Query done.");
1258+
}
1259+
}
12661260
```
12671261

12681262
When you launch `SigNoz` with docker, the view will be available at `http://localhost:8080/` and the collector at `http://localhost:4317`.

sandbox/GeneratorSandbox/Program.cs

Lines changed: 29 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using Microsoft.Extensions.DependencyInjection;
33
using Microsoft.Extensions.Hosting;
44
using Microsoft.Extensions.Logging;
5+
using OpenTelemetry;
56
using OpenTelemetry.Logs;
67
using OpenTelemetry.Metrics;
78
using OpenTelemetry.Resources;
@@ -14,6 +15,7 @@
1415
// docker compose up
1516
Environment.SetEnvironmentVariable("OTEL_EXPORTER_OTLP_ENDPOINT", "http://localhost:4317"); // 4317 or 4318
1617

18+
// crate builder from Microsoft.Extensions.Hosting.Host
1719
var builder = Host.CreateApplicationBuilder(args);
1820

1921
builder.Logging.AddOpenTelemetry(logging =>
@@ -23,55 +25,60 @@
2325
});
2426

2527
builder.Services.AddOpenTelemetry()
28+
.UseOtlpExporter()
2629
.ConfigureResource(resource =>
2730
{
2831
resource.AddService("ConsoleAppFramework Telemetry Sample");
2932
})
3033
.WithMetrics(metrics =>
3134
{
35+
// configure for metrics
3236
metrics.AddRuntimeInstrumentation()
33-
.AddHttpClientInstrumentation()
34-
.AddOtlpExporter();
37+
.AddHttpClientInstrumentation();
3538
})
3639
.WithTracing(tracing =>
3740
{
41+
// configure for tracing
3842
tracing.SetSampler(new AlwaysOnSampler())
3943
.AddHttpClientInstrumentation()
40-
.AddSource(ConsoleAppFrameworkSampleActivitySource.Name)
41-
.AddOtlpExporter();
44+
.AddSource(ConsoleAppFrameworkSampleActivitySource.Name);
4245
})
4346
.WithLogging(logging =>
4447
{
45-
logging.AddOtlpExporter();
48+
// configure for logging
4649
});
4750

4851
var app = builder.ToConsoleAppBuilder();
4952

50-
var consoleAppLoger = ConsoleApp.ServiceProvider.GetRequiredService<ILogger<Program>>(); // already built service provider.
51-
ConsoleApp.Log = msg => consoleAppLoger.LogDebug(msg);
52-
ConsoleApp.LogError = msg => consoleAppLoger.LogError(msg);
53+
app.Add<SampleCommand>();
5354

55+
// setup filter
5456
app.UseFilter<CommandTracingFilter>();
5557

56-
app.Add("", async ([FromServices] ILogger<Program> logger, CancellationToken cancellationToken) =>
58+
await app.RunAsync(args); // Run
59+
60+
public class SampleCommand(ILogger<SampleCommand> logger)
5761
{
58-
using var httpClient = new HttpClient();
59-
var ms = await httpClient.GetStringAsync("https://www.microsoft.com", cancellationToken);
60-
logger.LogInformation(ms);
61-
var google = await httpClient.GetStringAsync("https://www.google.com", cancellationToken);
62-
logger.LogInformation(google);
62+
[Command("")]
63+
public async Task Run(CancellationToken cancellationToken)
64+
{
65+
using var httpClient = new HttpClient();
6366

64-
var ms2 = httpClient.GetStringAsync("https://www.microsoft.com", cancellationToken);
65-
var google2 = httpClient.GetStringAsync("https://www.google.com", cancellationToken);
66-
var apple2 = httpClient.GetStringAsync("https://www.apple.com", cancellationToken);
67-
await Task.WhenAll(ms2, google2, apple2);
67+
var ms = await httpClient.GetStringAsync("https://www.microsoft.com", cancellationToken);
68+
var google = await httpClient.GetStringAsync("https://www.google.com", cancellationToken);
6869

69-
logger.LogInformation(apple2.Result);
70+
logger.LogInformation("Sequential Query done.");
71+
72+
var ms2 = httpClient.GetStringAsync("https://www.microsoft.com", cancellationToken);
73+
var google2 = httpClient.GetStringAsync("https://www.google.com", cancellationToken);
74+
var apple2 = httpClient.GetStringAsync("https://www.apple.com", cancellationToken);
75+
await Task.WhenAll(ms2, google2, apple2);
76+
77+
logger.LogInformation("Parallel Query done.");
78+
}
79+
}
7080

71-
logger.LogInformation("OK");
72-
});
7381

74-
await app.RunAsync(args); // Run
7582

7683
public static class ConsoleAppFrameworkSampleActivitySource
7784
{

0 commit comments

Comments
 (0)