Skip to content

Configure Logger headers declaratively with JSON #120

Open
@frank-ang

Description

@frank-ang

Summary

Opentelemetry sink incorrectly ignores request headers when the Logger is configured declaratively using JSON ConfigurationBuilder.
In contrast, request headers are sent correctly only when the Logger is configured programmatically.

Steps to reproduce

  1. Configure a header section of Serilog.Sinks.OpenTelemetry sink in the JSON configuration file.
    "WriteTo": [
      {
        "Name": "OpenTelemetry",
        "Args": { 
          "endpoint": "http://127.0.0.1:4318/v1/logs",
          "protocol": "HttpProtobuf",
          "headers": {
            "Authorization": "Bearer TOKEN_REDACTED"          
          }
        },
      }
    ]
  1. Build the logger using JSON
var configuration = new ConfigurationBuilder()
    .AddJsonFile("appsettings.json")
    .Build();
Log.Logger = new LoggerConfiguration()
    .ReadFrom.Configuration(configuration)
    .CreateLogger();
  1. Call the logger, Log.Information()

Expected Result.

  • Authentication succeeds.
  • Network packet capture should show headers are included in requests to OpenTelemetry endpoint.

Actual Result.

  • Authentication fails.
    • Exception when using HttpProtobuf protocol: Exception while emitting periodic batch from Serilog.Sinks.PeriodicBatching.PeriodicBatchingSink: System.Net.Http.HttpRequestException: Response status code does not indicate success: 403 (Forbidden).
    • Exception when using Grpc protocol: Exception while emitting periodic batch from Serilog.Sinks.PeriodicBatching.PeriodicBatchingSink: Grpc.Core.RpcException: Status(StatusCode="Unauthenticated",
  • Network packet capture (Wireshark) verifies headers are missing from requests to OpenTelemetry endpoint.

Potentially Related

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions