Skip to content

Commit 2003517

Browse files
authored
feat: Extend logging configuration. Format logs by default. (#242)
## Summary Allow further logging configuration. ## How did you test this change? Unit and manual tests.
1 parent a895c97 commit 2003517

File tree

6 files changed

+108
-3
lines changed

6 files changed

+108
-3
lines changed

sdk/@launchdarkly/observability-dotnet/src/LaunchDarkly.Observability/Asp/Core/ObservabilityExtensions.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,12 @@ internal static void AddLaunchDarklyObservabilityWithConfig(this IServiceCollect
6767
options.WithCommonLaunchDarklyLoggingExport(config);
6868
});
6969
config.ExtendedLoggerConfiguration?.Invoke(logging);
70-
}).WithMetrics(metrics =>
70+
}, options =>
71+
{
72+
options.IncludeFormattedMessage = true;
73+
config.ExtendedLoggerOptionsConfiguration?.Invoke(options);
74+
})
75+
.WithMetrics(metrics =>
7176
{
7277
metrics
7378
.WithCommonLaunchDarklyConfig(config, resourceBuilder)

sdk/@launchdarkly/observability-dotnet/src/LaunchDarkly.Observability/Asp/Core/ObservabilityPlugin.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,13 @@ internal ObservabilityPluginBuilder(IServiceCollection services) : base()
101101
"Service collection cannot be null when creating an ObservabilityPlugin builder.");
102102
}
103103

104+
public ObservabilityPluginBuilder WithExtendedLoggerConfiguration(Action<LoggerProviderBuilder> extendedLoggerConfiguration, Action<OpenTelemetryLoggerOptions> configureLoggerOptions)
105+
{
106+
WithExtendedLoggerConfiguration(extendedLoggerConfiguration);
107+
ConfigureLoggerOptions = configureLoggerOptions;
108+
return this;
109+
}
110+
104111
/// <summary>
105112
/// Build an <see cref="ObservabilityPlugin"/> instance with the configured settings.
106113
/// </summary>

sdk/@launchdarkly/observability-dotnet/src/LaunchDarkly.Observability/Asp/Legacy/OpenTelemetryConfig.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ public static void AddLaunchDarklyLogging(this ILoggingBuilder loggingBuilder, O
3434
options.SetResourceBuilder(CommonOtelOptions.GetResourceBuilder(config))
3535
.AddProcessor(new SamplingLogProcessor(CommonOtelOptions.GetSampler(config)))
3636
.AddOtlpExporter(exportOptions => { exportOptions.WithCommonLaunchDarklyLoggingExport(config); });
37-
3837
config.ExtendedLoggerConfiguration?.Invoke(options);
3938
});
4039
}

sdk/@launchdarkly/observability-dotnet/src/LaunchDarkly.Observability/BaseBuilder.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@ public class BaseBuilder<TBuilder> where TBuilder : BaseBuilder<TBuilder>
3131
private Action<TracerProviderBuilder> _extendedTracerConfiguration;
3232
private Action<LoggerBuilderType> _extendedLoggerConfiguration;
3333
private Action<MeterProviderBuilder> _extendedMeterConfiguration;
34+
#if !NETFRAMEWORK
35+
protected Action<OpenTelemetryLoggerOptions> ConfigureLoggerOptions;
36+
#endif
3437

3538
protected BaseBuilder()
3639
{
@@ -265,7 +268,11 @@ internal ObservabilityConfig BuildConfig(string sdkKey)
265268
sdkKey,
266269
_extendedTracerConfiguration,
267270
_extendedLoggerConfiguration,
268-
_extendedMeterConfiguration);
271+
_extendedMeterConfiguration
272+
#if !NETFRAMEWORK
273+
, ConfigureLoggerOptions
274+
#endif
275+
);
269276
}
270277
}
271278
}

sdk/@launchdarkly/observability-dotnet/src/LaunchDarkly.Observability/ObservabilityConfig.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ namespace LaunchDarkly.Observability
77
{
88
#if NETFRAMEWORK
99
using LoggerBuilderType = OpenTelemetryLoggerOptions;
10+
1011
#else
1112
using LoggerBuilderType = LoggerProviderBuilder;
1213
#endif
@@ -60,6 +61,13 @@ public class ObservabilityConfig
6061
/// </summary>
6162
public Action<LoggerBuilderType> ExtendedLoggerConfiguration { get; }
6263

64+
#if !NETFRAMEWORK
65+
/// <summary>
66+
/// Function which extends the options of the logger provider.
67+
/// </summary>
68+
public Action<OpenTelemetryLoggerOptions> ExtendedLoggerOptionsConfiguration { get; }
69+
#endif
70+
6371
/// <summary>
6472
/// Function which extends the configuration of the meter provider.
6573
/// </summary>
@@ -75,6 +83,9 @@ internal ObservabilityConfig(
7583
Action<TracerProviderBuilder> extendedTracerConfiguration,
7684
Action<LoggerBuilderType> extendedLoggerConfiguration,
7785
Action<MeterProviderBuilder> extendedMeterConfiguration
86+
#if !NETFRAMEWORK
87+
, Action<OpenTelemetryLoggerOptions> extendedLoggerOptionConfiguration
88+
#endif
7889
)
7990
{
8091
OtlpEndpoint = otlpEndpoint;
@@ -86,6 +97,9 @@ Action<MeterProviderBuilder> extendedMeterConfiguration
8697
ExtendedTracerConfiguration = extendedTracerConfiguration;
8798
ExtendedLoggerConfiguration = extendedLoggerConfiguration;
8899
ExtendedMeterConfiguration = extendedMeterConfiguration;
100+
#if !NETFRAMEWORK
101+
ExtendedLoggerOptionsConfiguration = extendedLoggerOptionConfiguration;
102+
#endif
89103
}
90104

91105
/// <summary>

sdk/@launchdarkly/observability-dotnet/test/LaunchDarkly.Observability.Tests/ObservabilityPluginBuilderTests.cs

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
using NUnit.Framework;
22
using System;
33
using Microsoft.Extensions.DependencyInjection;
4+
#if !NETFRAMEWORK
5+
using OpenTelemetry.Logs;
6+
#endif
47

58
namespace LaunchDarkly.Observability.Test
69
{
@@ -115,5 +118,75 @@ public void Build_PrefersExplicitServiceName_OverEnvironmentVariable()
115118
Environment.SetEnvironmentVariable(EnvironmentVariables.OtelServiceName, originalValue);
116119
}
117120
}
121+
122+
#if !NETFRAMEWORK
123+
[Test]
124+
public void WithExtendedLoggerConfiguration_WithBothParameters_SetsConfigurationCorrectly()
125+
{
126+
Action<LoggerProviderBuilder> loggerConfig = _ => { };
127+
Action<OpenTelemetryLoggerOptions> loggerOptions = _ => { };
128+
129+
var pluginBuilder = ObservabilityPlugin.Builder(_services)
130+
.WithExtendedLoggerConfiguration(loggerConfig, loggerOptions);
131+
132+
var plugin = pluginBuilder.Build();
133+
134+
Assert.That(plugin, Is.Not.Null);
135+
Assert.That(plugin, Is.InstanceOf<ObservabilityPlugin>());
136+
}
137+
138+
[Test]
139+
public void WithExtendedLoggerConfiguration_WithNullLoggerConfiguration_AcceptsNullValue()
140+
{
141+
Action<OpenTelemetryLoggerOptions> loggerOptions = _ => { };
142+
143+
var pluginBuilder = ObservabilityPlugin.Builder(_services)
144+
.WithExtendedLoggerConfiguration(null, loggerOptions);
145+
146+
var plugin = pluginBuilder.Build();
147+
148+
Assert.That(plugin, Is.Not.Null);
149+
Assert.That(plugin, Is.InstanceOf<ObservabilityPlugin>());
150+
}
151+
152+
[Test]
153+
public void WithExtendedLoggerConfiguration_WithNullLoggerOptions_AcceptsNullValue()
154+
{
155+
Action<LoggerProviderBuilder> loggerConfig = _ => { };
156+
157+
var pluginBuilder = ObservabilityPlugin.Builder(_services)
158+
.WithExtendedLoggerConfiguration(loggerConfig, null);
159+
160+
var plugin = pluginBuilder.Build();
161+
162+
Assert.That(plugin, Is.Not.Null);
163+
Assert.That(plugin, Is.InstanceOf<ObservabilityPlugin>());
164+
}
165+
166+
[Test]
167+
public void WithExtendedLoggerConfiguration_WithBothParametersNull_AcceptsNullValues()
168+
{
169+
var pluginBuilder = ObservabilityPlugin.Builder(_services)
170+
.WithExtendedLoggerConfiguration(null, null);
171+
172+
var plugin = pluginBuilder.Build();
173+
174+
Assert.That(plugin, Is.Not.Null);
175+
Assert.That(plugin, Is.InstanceOf<ObservabilityPlugin>());
176+
}
177+
178+
[Test]
179+
public void WithExtendedLoggerConfiguration_ReturnsBuilderInstance()
180+
{
181+
Action<LoggerProviderBuilder> loggerConfig = _ => { };
182+
Action<OpenTelemetryLoggerOptions> loggerOptions = _ => { };
183+
184+
var result = ObservabilityPlugin.Builder(_services)
185+
.WithExtendedLoggerConfiguration(loggerConfig, loggerOptions);
186+
187+
Assert.That(result, Is.Not.Null);
188+
Assert.That(result, Is.InstanceOf<ObservabilityPlugin.ObservabilityPluginBuilder>());
189+
}
190+
#endif
118191
}
119192
}

0 commit comments

Comments
 (0)