open-telemetry / opentelemetry-dotnet

The OpenTelemetry .NET Client
https://opentelemetry.io
Apache License 2.0
3.1k stars 739 forks source link

UseOtlpExporter doesn't seem to work with just a logging configuration #5652

Open davidfowl opened 1 month ago

davidfowl commented 1 month ago
<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.8.1" />
    <PackageReference Include="OpenTelemetry.Extensions.Hosting" Version="1.8.1" />
    <PackageReference Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.8.1" />
  </ItemGroup>

</Project>
using OpenTelemetry;
using OpenTelemetry.Trace;

var builder = WebApplication.CreateBuilder(args);

builder.Logging.AddOpenTelemetry();

builder.Services.AddOpenTelemetry().UseOtlpExporter();

var app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.Run();

cc @CodeBlanch

dario-griffo-paytently commented 1 month ago

@davidfowl your code works for me image What I think is a problem that you don't need builder.Logging.AddOpenTelemetry(); if you do builder.Services.AddOpenTelemetry().UseOtlpExporter(); since it enables the logging.

I have created an issue here because I want to use serilog as provider but seeing duplicated logs in my otel

The following code exports logs, dotnet 8.0.300, OTEL 1.8.1

using OpenTelemetry;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddOpenTelemetry().UseOtlpExporter();

var app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.Run();
CodeBlanch commented 1 month ago

@davidfowl

I just tested it, this seems to work fine:

builder.Logging.AddOpenTelemetry();

builder.Services.AddOpenTelemetry().UseOtlpExporter();

Which is what I would expect.

When using UseOtlpExporter you can just call:

builder.Services.AddOpenTelemetry().UseOtlpExporter();

Because UseOtlpExporter does the work of Logging.AddOpenTelemetry().

But this alone though wouldn't work:

builder.Logging.AddOpenTelemetry();

That would need to be:

builder.Logging.AddOpenTelemetry(options => options.AddOtlpExporter());

Can you clarify what you are trying to do and seeing?