By following the .NET Getting started of OpenTelemetry documention I'm able to catch every traces in my Grafana Tempo docker. I can see my HTTP calls, my crashes and my database queries in my Grafana Tempo explorer.
To test it, I created 4 routes in my swagger.
My problem is that I'm not able to see my manual logs sent with _logger.LogInformation("hello")
while I see it in my console.
// My SendLogs endpoint
[HttpGet("SendLogs")]
public void SendLogs()
{
_logger.LogInformation("Info log");
_logger.LogTrace("Trace log");
_logger.LogDebug("Debug log");
_logger.LogWarning("Warning log");
_logger.LogError("Error log");
_logger.LogCritical("Critical log");
}
// Program.cs
//...
builder.Services.AddOpenTelemetry()
.WithTracing(tracerProviderBuilder =>
tracerProviderBuilder
.AddSource(DiagnosticsConfig.ActivitySource.Name)
.ConfigureResource(resource => resource.AddService(DiagnosticsConfig.ServiceName))
.AddAspNetCoreInstrumentation(options =>
{
options.RecordException = true;
})
.AddConsoleExporter()
.AddOtlpExporter()
.AddNpgsql()
)
.WithMetrics(metricsProviderBuilder =>
metricsProviderBuilder
.ConfigureResource(resource => resource.AddService(DiagnosticsConfig.ServiceName))
.AddAspNetCoreInstrumentation()
//.AddConsoleExporter()
.AddOtlpExporter()
);
builder.Services.AddEntityFrameworkNpgsql().AddDbContext<ApiDbContext>(opt =>
{
opt.UseNpgsql(builder.Configuration.GetConnectionString("SampleDbConnection"));
});
builder.Logging.ClearProviders();
ResourceBuilder resourceBuilder = ResourceBuilder.CreateDefault().AddService(DiagnosticsConfig.ServiceName);
builder.Logging.AddOpenTelemetry(options =>
{
options
.SetResourceBuilder(resourceBuilder)
.AddConsoleExporter()
.AddOtlpExporter();
});
builder.Services.Configure<OpenTelemetryLoggerOptions>(opt =>
{
opt.IncludeScopes = true;
opt.ParseStateValues = true;
opt.IncludeFormattedMessage = true;
});
//...
My console correctly display my manual log, but I can't retrieve it in my Tempo