Skip to content

Commit

Permalink
Added OpenTelemetryEnvironment
Browse files Browse the repository at this point in the history
This method configure with default environmental variables definitions

Fixes serilog#12
  • Loading branch information
Alberto Monteiro committed Jun 20, 2024
1 parent b0a18fa commit c66ec63
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -192,4 +192,55 @@ public static LoggerConfiguration OpenTelemetry(
resourceAttributes?.AddTo(options.ResourceAttributes);
});
}

/// <summary>
/// Audit to an OTLP exporter, waiting for each event to be acknowledged, and propagating errors to the caller. This method uses default environmental variable definitions(https://opentelemetry.io/docs/reference/specification/protocol/exporter/).
/// </summary>
/// <param name="loggerAuditSinkConfiguration">
/// The `AuditTo` configuration object.
/// </param>
/// <param name="protocol">
/// The OTLP protocol to use.
/// </param>
/// <param name="includedData">
/// Which fields should be included in the log events generated by the sink.
/// </param>
/// <returns>Logger configuration, allowing configuration to continue.</returns>
public static LoggerConfiguration OpenTelemetryEnvironment(
this LoggerAuditSinkConfiguration loggerAuditSinkConfiguration,
OtlpProtocol protocol = OpenTelemetrySinkOptions.DefaultProtocol,
IncludedData? includedData = null)
{
if (loggerAuditSinkConfiguration == null) throw new ArgumentNullException(nameof(loggerAuditSinkConfiguration));

return loggerAuditSinkConfiguration.OpenTelemetry(options =>
{
options.Endpoint = Environment.GetEnvironmentVariable("OTEL_EXPORTER_OTLP_ENDPOINT") ?? throw new InvalidOperationException("OTEL_EXPORTER_OTLP_ENDPOINT was not found");
options.Protocol = protocol;
options.IncludedData = includedData ?? options.IncludedData;
AddHeaders(Environment.GetEnvironmentVariable("OTEL_EXPORTER_OTLP_HEADERS"), options.Headers);
AddResourceAttributes(Environment.GetEnvironmentVariable("OTEL_RESOURCE_ATTRIBUTES"), options.ResourceAttributes);
});

static void AddHeaders(string? config, IDictionary<string, string> configs)
{
foreach (var part in config?.Split(',') ?? [])
{
if (part.Split('=') is { Length: 2 } parts)
configs.Add(parts[0], parts[1]);
else
throw new InvalidOperationException($"Invalid header format: {part}");
}
}
static void AddResourceAttributes(string? config, IDictionary<string, object> configs)
{
foreach (var part in config?.Split(',') ?? [])
{
if (part.Split('=') is { Length: 2 } parts)
configs.Add(parts[0], parts[1]);
else
throw new InvalidOperationException($"Invalid resourceAttributes format: {part}");
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
public static Serilog.LoggerConfiguration OpenTelemetry(this Serilog.Configuration.LoggerSinkConfiguration loggerSinkConfiguration, System.Action<Serilog.Sinks.OpenTelemetry.BatchedOpenTelemetrySinkOptions> configure) { }
public static Serilog.LoggerConfiguration OpenTelemetry(this Serilog.Configuration.LoggerAuditSinkConfiguration loggerAuditSinkConfiguration, string endpoint = "http://localhost:4317", Serilog.Sinks.OpenTelemetry.OtlpProtocol protocol = 0, System.Collections.Generic.IDictionary<string, string>? headers = null, System.Collections.Generic.IDictionary<string, object>? resourceAttributes = null, Serilog.Sinks.OpenTelemetry.IncludedData? includedData = default) { }
public static Serilog.LoggerConfiguration OpenTelemetry(this Serilog.Configuration.LoggerSinkConfiguration loggerSinkConfiguration, string endpoint = "http://localhost:4317", Serilog.Sinks.OpenTelemetry.OtlpProtocol protocol = 0, System.Collections.Generic.IDictionary<string, string>? headers = null, System.Collections.Generic.IDictionary<string, object>? resourceAttributes = null, Serilog.Sinks.OpenTelemetry.IncludedData? includedData = default, Serilog.Events.LogEventLevel restrictedToMinimumLevel = 0, Serilog.Core.LoggingLevelSwitch? levelSwitch = null) { }
public static Serilog.LoggerConfiguration OpenTelemetryEnvironment(this Serilog.Configuration.LoggerAuditSinkConfiguration loggerAuditSinkConfiguration, Serilog.Sinks.OpenTelemetry.OtlpProtocol protocol = 0, Serilog.Sinks.OpenTelemetry.IncludedData? includedData = default) { }
}
}
namespace Serilog.Sinks.OpenTelemetry
Expand Down

0 comments on commit c66ec63

Please sign in to comment.