[sdk-logs] Expose logging SDK implementation as public (#4568)

This commit is contained in:
Mikel Blanchard 2023-06-09 15:44:45 -07:00 committed by GitHub
parent 2e57e2daab
commit d57e6f8688
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
18 changed files with 182 additions and 77 deletions

View File

@ -6,6 +6,10 @@
for instructions to enable exemplars. for instructions to enable exemplars.
([#4553](https://github.com/open-telemetry/opentelemetry-dotnet/pull/4553)) ([#4553](https://github.com/open-telemetry/opentelemetry-dotnet/pull/4553))
* Updated to display `Severity` and `SeverityText` text instead of
`ILogger.LogLevel` when exporting `LogRecord` instances.
([#4568](https://github.com/open-telemetry/opentelemetry-dotnet/pull/4568))
## 1.5.0 ## 1.5.0
Released 2023-Jun-05 Released 2023-Jun-05

View File

@ -74,7 +74,15 @@ namespace OpenTelemetry.Exporter
this.WriteLine($"{"LogRecord.CategoryName:",-RightPaddingLength}{logRecord.CategoryName}"); this.WriteLine($"{"LogRecord.CategoryName:",-RightPaddingLength}{logRecord.CategoryName}");
} }
this.WriteLine($"{"LogRecord.LogLevel:",-RightPaddingLength}{logRecord.LogLevel}"); if (logRecord.Severity.HasValue)
{
this.WriteLine($"{"LogRecord.Severity:",-RightPaddingLength}{logRecord.Severity}");
}
if (logRecord.SeverityText != null)
{
this.WriteLine($"{"LogRecord.SeverityText:",-RightPaddingLength}{logRecord.SeverityText}");
}
if (logRecord.FormattedMessage != null) if (logRecord.FormattedMessage != null)
{ {

View File

@ -28,13 +28,11 @@
<Compile Include="$(RepoRoot)\src\OpenTelemetry.Api\Internal\ExceptionExtensions.cs" Link="Includes\ExceptionExtensions.cs" /> <Compile Include="$(RepoRoot)\src\OpenTelemetry.Api\Internal\ExceptionExtensions.cs" Link="Includes\ExceptionExtensions.cs" />
<Compile Include="$(RepoRoot)\src\OpenTelemetry.Api\Internal\Guard.cs" Link="Includes\Guard.cs" /> <Compile Include="$(RepoRoot)\src\OpenTelemetry.Api\Internal\Guard.cs" Link="Includes\Guard.cs" />
<Compile Include="$(RepoRoot)\src\OpenTelemetry.Api\Internal\SpanAttributeConstants.cs" Link="Includes\SpanAttributeConstants.cs" /> <Compile Include="$(RepoRoot)\src\OpenTelemetry.Api\Internal\SpanAttributeConstants.cs" Link="Includes\SpanAttributeConstants.cs" />
<!-- Note: OpenTelemetry.Exporter.Console temporarily sees OpenTelemetry internals for LoggerProviderBuilder extensions
<Compile Include="$(RepoRoot)\src\OpenTelemetry\Internal\OpenTelemetrySdkEventSource.cs" Link="Includes\OpenTelemetrySdkEventSource.cs" /> <Compile Include="$(RepoRoot)\src\OpenTelemetry\Internal\OpenTelemetrySdkEventSource.cs" Link="Includes\OpenTelemetrySdkEventSource.cs" />
<Compile Include="$(RepoRoot)\src\OpenTelemetry\Internal\PeriodicExportingMetricReaderHelper.cs" Link="Includes\PeriodicExportingMetricReaderHelper.cs" /> <Compile Include="$(RepoRoot)\src\OpenTelemetry\Internal\PeriodicExportingMetricReaderHelper.cs" Link="Includes\PeriodicExportingMetricReaderHelper.cs" />
<Compile Include="$(RepoRoot)\src\OpenTelemetry\Internal\TagTransformer.cs" Link="Includes\TagTransformer.cs" /> <Compile Include="$(RepoRoot)\src\OpenTelemetry\Internal\TagTransformer.cs" Link="Includes\TagTransformer.cs" />
<Compile Include="$(RepoRoot)\src\OpenTelemetry\Internal\Shims\UnconditionalSuppressMessageAttribute.cs" Link="Includes\UnconditionalSuppressMessageAttribute.cs" Condition="'$(TargetFrameworkIdentifier)' != '.NETCoreApp'" /> <Compile Include="$(RepoRoot)\src\OpenTelemetry\Internal\Shims\UnconditionalSuppressMessageAttribute.cs" Link="Includes\UnconditionalSuppressMessageAttribute.cs" Condition="'$(TargetFrameworkIdentifier)' != '.NETCoreApp'" />
<Compile Include="$(RepoRoot)\src\OpenTelemetry\Metrics\Base2ExponentialBucketHistogram.LowerBoundary.cs" Link="Includes\Base2ExponentialBucketHistogram.LowerBoundary.cs" /> <Compile Include="$(RepoRoot)\src\OpenTelemetry\Metrics\Base2ExponentialBucketHistogram.LowerBoundary.cs" Link="Includes\Base2ExponentialBucketHistogram.LowerBoundary.cs" />
-->
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -2,18 +2,21 @@
## Unreleased ## Unreleased
* Merged `OpenTelemetry.Exporter.OpenTelemetryProtocol.Logs` package in to * Merged `OpenTelemetry.Exporter.OpenTelemetryProtocol.Logs` package into
`OpenTelemetry.Exporter.OpenTelemetryProtocol`. Going Forward, `OpenTelemetry.Exporter.OpenTelemetryProtocol`. Going Forward,
`OpenTelemetry.Exporter.OpenTelemetryProtocol` will be the only package needed `OpenTelemetry.Exporter.OpenTelemetryProtocol` will be the only package needed
for all 3 signals (Logs, Metrics and Traces). All the changes made in for all 3 signals (Logs, Metrics, and Traces). All the changes made in
[`OpenTelemetry.Exporter.OpenTelemetryProtocol.Logs`](https://github.com/open-telemetry/opentelemetry-dotnet/blob/core-1.5.0/src/OpenTelemetry.Exporter.OpenTelemetryProtocol.Logs/CHANGELOG.md#changelog) [`OpenTelemetry.Exporter.OpenTelemetryProtocol.Logs`](https://github.com/open-telemetry/opentelemetry-dotnet/blob/core-1.5.0/src/OpenTelemetry.Exporter.OpenTelemetryProtocol.Logs/CHANGELOG.md#changelog)
are now included in this package. are now included in this package.
([#4556](https://github.com/open-telemetry/opentelemetry-dotnet/pull/4556)) ([#4556](https://github.com/open-telemetry/opentelemetry-dotnet/pull/4556))
* Add back support for Exemplars. See [exemplars](../../docs/metrics/customizing-the-sdk/README.md#exemplars) * Add back support for Exemplars. See [exemplars](../../docs/metrics/customizing-the-sdk/README.md#exemplars)
for instructions to enable exemplars. for instructions to enable exemplars.
([#4553](https://github.com/open-telemetry/opentelemetry-dotnet/pull/4553)) ([#4553](https://github.com/open-telemetry/opentelemetry-dotnet/pull/4553))
* Updated to support `Severity` and `SeverityText` when exporting `LogRecord`s.
([#4568](https://github.com/open-telemetry/opentelemetry-dotnet/pull/4568))
## 1.5.0 ## 1.5.0
Released 2023-Jun-05 Released 2023-Jun-05

View File

@ -16,7 +16,6 @@
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
using Google.Protobuf; using Google.Protobuf;
using Microsoft.Extensions.Logging;
using OpenTelemetry.Internal; using OpenTelemetry.Internal;
using OpenTelemetry.Logs; using OpenTelemetry.Logs;
using OpenTelemetry.Trace; using OpenTelemetry.Trace;
@ -29,11 +28,6 @@ namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation
{ {
internal static class LogRecordExtensions internal static class LogRecordExtensions
{ {
private static readonly string[] LogLevels = new string[7]
{
"Trace", "Debug", "Information", "Warning", "Error", "Critical", "None",
};
internal static void AddBatch( internal static void AddBatch(
this OtlpCollector.ExportLogsServiceRequest request, this OtlpCollector.ExportLogsServiceRequest request,
SdkLimitOptions sdkLimitOptions, SdkLimitOptions sdkLimitOptions,
@ -71,10 +65,18 @@ namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation
{ {
TimeUnixNano = timestamp, TimeUnixNano = timestamp,
ObservedTimeUnixNano = timestamp, ObservedTimeUnixNano = timestamp,
SeverityNumber = GetSeverityNumber(logRecord.LogLevel), SeverityNumber = GetSeverityNumber(logRecord.Severity),
SeverityText = LogLevels[(int)logRecord.LogLevel],
}; };
if (!string.IsNullOrWhiteSpace(logRecord.SeverityText))
{
otlpLogRecord.SeverityText = logRecord.SeverityText;
}
else if (logRecord.Severity.HasValue)
{
otlpLogRecord.SeverityText = logRecord.Severity.Value.ToShortName();
}
var attributeValueLengthLimit = sdkLimitOptions.AttributeValueLengthLimit; var attributeValueLengthLimit = sdkLimitOptions.AttributeValueLengthLimit;
var attributeCountLimit = sdkLimitOptions.AttributeCountLimit ?? int.MaxValue; var attributeCountLimit = sdkLimitOptions.AttributeCountLimit ?? int.MaxValue;
@ -226,35 +228,14 @@ namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation
} }
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
private static OtlpLogs.SeverityNumber GetSeverityNumber(LogLevel logLevel) private static OtlpLogs.SeverityNumber GetSeverityNumber(LogRecordSeverity? severity)
{ {
// Maps the ILogger LogLevel to OpenTelemetry logging level. if (!severity.HasValue)
// https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/logs/data-model.md#appendix-b-severitynumber-example-mappings
// TODO: for improving perf simply do ((int)loglevel * 4) + 1
// or ((int)logLevel << 2) + 1
// Current code is just for ease of reading.
switch (logLevel)
{ {
case LogLevel.Trace: return OtlpLogs.SeverityNumber.Unspecified;
return OtlpLogs.SeverityNumber.Trace;
case LogLevel.Debug:
return OtlpLogs.SeverityNumber.Debug;
case LogLevel.Information:
return OtlpLogs.SeverityNumber.Info;
case LogLevel.Warning:
return OtlpLogs.SeverityNumber.Warn;
case LogLevel.Error:
return OtlpLogs.SeverityNumber.Error;
case LogLevel.Critical:
return OtlpLogs.SeverityNumber.Fatal;
// TODO:
// we reach default only for LogLevel.None
// but that is filtered out anyway.
// should we throw here then?
default:
return OtlpLogs.SeverityNumber.Debug;
} }
return (OtlpLogs.SeverityNumber)(int)severity.Value;
} }
} }
} }

View File

@ -1,3 +1,12 @@
OpenTelemetry.Logs.BatchExportLogRecordProcessorOptions
OpenTelemetry.Logs.BatchExportLogRecordProcessorOptions.BatchExportLogRecordProcessorOptions() -> void
OpenTelemetry.Logs.LoggerProviderBuilderExtensions
OpenTelemetry.Logs.LoggerProviderExtensions
OpenTelemetry.Logs.LogRecord.Logger.get -> OpenTelemetry.Logs.Logger?
OpenTelemetry.Logs.LogRecord.Severity.get -> OpenTelemetry.Logs.LogRecordSeverity?
OpenTelemetry.Logs.LogRecord.Severity.set -> void
OpenTelemetry.Logs.LogRecord.SeverityText.get -> string?
OpenTelemetry.Logs.LogRecord.SeverityText.set -> void
OpenTelemetry.Metrics.AlwaysOffExemplarFilter OpenTelemetry.Metrics.AlwaysOffExemplarFilter
OpenTelemetry.Metrics.AlwaysOffExemplarFilter.AlwaysOffExemplarFilter() -> void OpenTelemetry.Metrics.AlwaysOffExemplarFilter.AlwaysOffExemplarFilter() -> void
OpenTelemetry.Metrics.AlwaysOnExemplarFilter OpenTelemetry.Metrics.AlwaysOnExemplarFilter
@ -13,7 +22,17 @@ OpenTelemetry.Metrics.ExemplarFilter.ExemplarFilter() -> void
OpenTelemetry.Metrics.MetricPoint.GetExemplars() -> OpenTelemetry.Metrics.Exemplar[]! OpenTelemetry.Metrics.MetricPoint.GetExemplars() -> OpenTelemetry.Metrics.Exemplar[]!
OpenTelemetry.Metrics.TraceBasedExemplarFilter OpenTelemetry.Metrics.TraceBasedExemplarFilter
OpenTelemetry.Metrics.TraceBasedExemplarFilter.TraceBasedExemplarFilter() -> void OpenTelemetry.Metrics.TraceBasedExemplarFilter.TraceBasedExemplarFilter() -> void
static OpenTelemetry.Logs.LoggerProviderBuilderExtensions.AddProcessor(this OpenTelemetry.Logs.LoggerProviderBuilder! loggerProviderBuilder, OpenTelemetry.BaseProcessor<OpenTelemetry.Logs.LogRecord!>! processor) -> OpenTelemetry.Logs.LoggerProviderBuilder!
static OpenTelemetry.Logs.LoggerProviderBuilderExtensions.AddProcessor(this OpenTelemetry.Logs.LoggerProviderBuilder! loggerProviderBuilder, System.Func<System.IServiceProvider!, OpenTelemetry.BaseProcessor<OpenTelemetry.Logs.LogRecord!>!>! implementationFactory) -> OpenTelemetry.Logs.LoggerProviderBuilder!
static OpenTelemetry.Logs.LoggerProviderBuilderExtensions.AddProcessor<T>(this OpenTelemetry.Logs.LoggerProviderBuilder! loggerProviderBuilder) -> OpenTelemetry.Logs.LoggerProviderBuilder!
static OpenTelemetry.Logs.LoggerProviderBuilderExtensions.Build(this OpenTelemetry.Logs.LoggerProviderBuilder! loggerProviderBuilder) -> OpenTelemetry.Logs.LoggerProvider!
static OpenTelemetry.Logs.LoggerProviderBuilderExtensions.ConfigureResource(this OpenTelemetry.Logs.LoggerProviderBuilder! loggerProviderBuilder, System.Action<OpenTelemetry.Resources.ResourceBuilder!>! configure) -> OpenTelemetry.Logs.LoggerProviderBuilder!
static OpenTelemetry.Logs.LoggerProviderBuilderExtensions.SetResourceBuilder(this OpenTelemetry.Logs.LoggerProviderBuilder! loggerProviderBuilder, OpenTelemetry.Resources.ResourceBuilder! resourceBuilder) -> OpenTelemetry.Logs.LoggerProviderBuilder!
static OpenTelemetry.Logs.LoggerProviderExtensions.AddProcessor(this OpenTelemetry.Logs.LoggerProvider! provider, OpenTelemetry.BaseProcessor<OpenTelemetry.Logs.LogRecord!>! processor) -> OpenTelemetry.Logs.LoggerProvider!
static OpenTelemetry.Logs.LoggerProviderExtensions.ForceFlush(this OpenTelemetry.Logs.LoggerProvider! provider, int timeoutMilliseconds = -1) -> bool
static OpenTelemetry.Logs.LoggerProviderExtensions.Shutdown(this OpenTelemetry.Logs.LoggerProvider! provider, int timeoutMilliseconds = -1) -> bool
static OpenTelemetry.Metrics.MeterProviderBuilderExtensions.SetExemplarFilter(this OpenTelemetry.Metrics.MeterProviderBuilder! meterProviderBuilder, OpenTelemetry.Metrics.ExemplarFilter! exemplarFilter) -> OpenTelemetry.Metrics.MeterProviderBuilder! static OpenTelemetry.Metrics.MeterProviderBuilderExtensions.SetExemplarFilter(this OpenTelemetry.Metrics.MeterProviderBuilder! meterProviderBuilder, OpenTelemetry.Metrics.ExemplarFilter! exemplarFilter) -> OpenTelemetry.Metrics.MeterProviderBuilder!
static OpenTelemetry.Sdk.CreateLoggerProviderBuilder() -> OpenTelemetry.Logs.LoggerProviderBuilder!
~abstract OpenTelemetry.Metrics.ExemplarFilter.ShouldSample(double value, System.ReadOnlySpan<System.Collections.Generic.KeyValuePair<string, object>> tags) -> bool ~abstract OpenTelemetry.Metrics.ExemplarFilter.ShouldSample(double value, System.ReadOnlySpan<System.Collections.Generic.KeyValuePair<string, object>> tags) -> bool
~abstract OpenTelemetry.Metrics.ExemplarFilter.ShouldSample(long value, System.ReadOnlySpan<System.Collections.Generic.KeyValuePair<string, object>> tags) -> bool ~abstract OpenTelemetry.Metrics.ExemplarFilter.ShouldSample(long value, System.ReadOnlySpan<System.Collections.Generic.KeyValuePair<string, object>> tags) -> bool
~OpenTelemetry.Metrics.Exemplar.FilteredTags.get -> System.Collections.Generic.List<System.Collections.Generic.KeyValuePair<string, object>> ~OpenTelemetry.Metrics.Exemplar.FilteredTags.get -> System.Collections.Generic.List<System.Collections.Generic.KeyValuePair<string, object>>

View File

@ -1,3 +1,12 @@
OpenTelemetry.Logs.BatchExportLogRecordProcessorOptions
OpenTelemetry.Logs.BatchExportLogRecordProcessorOptions.BatchExportLogRecordProcessorOptions() -> void
OpenTelemetry.Logs.LoggerProviderBuilderExtensions
OpenTelemetry.Logs.LoggerProviderExtensions
OpenTelemetry.Logs.LogRecord.Logger.get -> OpenTelemetry.Logs.Logger?
OpenTelemetry.Logs.LogRecord.Severity.get -> OpenTelemetry.Logs.LogRecordSeverity?
OpenTelemetry.Logs.LogRecord.Severity.set -> void
OpenTelemetry.Logs.LogRecord.SeverityText.get -> string?
OpenTelemetry.Logs.LogRecord.SeverityText.set -> void
OpenTelemetry.Metrics.AlwaysOffExemplarFilter OpenTelemetry.Metrics.AlwaysOffExemplarFilter
OpenTelemetry.Metrics.AlwaysOffExemplarFilter.AlwaysOffExemplarFilter() -> void OpenTelemetry.Metrics.AlwaysOffExemplarFilter.AlwaysOffExemplarFilter() -> void
OpenTelemetry.Metrics.AlwaysOnExemplarFilter OpenTelemetry.Metrics.AlwaysOnExemplarFilter
@ -13,7 +22,17 @@ OpenTelemetry.Metrics.ExemplarFilter.ExemplarFilter() -> void
OpenTelemetry.Metrics.MetricPoint.GetExemplars() -> OpenTelemetry.Metrics.Exemplar[]! OpenTelemetry.Metrics.MetricPoint.GetExemplars() -> OpenTelemetry.Metrics.Exemplar[]!
OpenTelemetry.Metrics.TraceBasedExemplarFilter OpenTelemetry.Metrics.TraceBasedExemplarFilter
OpenTelemetry.Metrics.TraceBasedExemplarFilter.TraceBasedExemplarFilter() -> void OpenTelemetry.Metrics.TraceBasedExemplarFilter.TraceBasedExemplarFilter() -> void
static OpenTelemetry.Logs.LoggerProviderBuilderExtensions.AddProcessor(this OpenTelemetry.Logs.LoggerProviderBuilder! loggerProviderBuilder, OpenTelemetry.BaseProcessor<OpenTelemetry.Logs.LogRecord!>! processor) -> OpenTelemetry.Logs.LoggerProviderBuilder!
static OpenTelemetry.Logs.LoggerProviderBuilderExtensions.AddProcessor(this OpenTelemetry.Logs.LoggerProviderBuilder! loggerProviderBuilder, System.Func<System.IServiceProvider!, OpenTelemetry.BaseProcessor<OpenTelemetry.Logs.LogRecord!>!>! implementationFactory) -> OpenTelemetry.Logs.LoggerProviderBuilder!
static OpenTelemetry.Logs.LoggerProviderBuilderExtensions.AddProcessor<T>(this OpenTelemetry.Logs.LoggerProviderBuilder! loggerProviderBuilder) -> OpenTelemetry.Logs.LoggerProviderBuilder!
static OpenTelemetry.Logs.LoggerProviderBuilderExtensions.Build(this OpenTelemetry.Logs.LoggerProviderBuilder! loggerProviderBuilder) -> OpenTelemetry.Logs.LoggerProvider!
static OpenTelemetry.Logs.LoggerProviderBuilderExtensions.ConfigureResource(this OpenTelemetry.Logs.LoggerProviderBuilder! loggerProviderBuilder, System.Action<OpenTelemetry.Resources.ResourceBuilder!>! configure) -> OpenTelemetry.Logs.LoggerProviderBuilder!
static OpenTelemetry.Logs.LoggerProviderBuilderExtensions.SetResourceBuilder(this OpenTelemetry.Logs.LoggerProviderBuilder! loggerProviderBuilder, OpenTelemetry.Resources.ResourceBuilder! resourceBuilder) -> OpenTelemetry.Logs.LoggerProviderBuilder!
static OpenTelemetry.Logs.LoggerProviderExtensions.AddProcessor(this OpenTelemetry.Logs.LoggerProvider! provider, OpenTelemetry.BaseProcessor<OpenTelemetry.Logs.LogRecord!>! processor) -> OpenTelemetry.Logs.LoggerProvider!
static OpenTelemetry.Logs.LoggerProviderExtensions.ForceFlush(this OpenTelemetry.Logs.LoggerProvider! provider, int timeoutMilliseconds = -1) -> bool
static OpenTelemetry.Logs.LoggerProviderExtensions.Shutdown(this OpenTelemetry.Logs.LoggerProvider! provider, int timeoutMilliseconds = -1) -> bool
static OpenTelemetry.Metrics.MeterProviderBuilderExtensions.SetExemplarFilter(this OpenTelemetry.Metrics.MeterProviderBuilder! meterProviderBuilder, OpenTelemetry.Metrics.ExemplarFilter! exemplarFilter) -> OpenTelemetry.Metrics.MeterProviderBuilder! static OpenTelemetry.Metrics.MeterProviderBuilderExtensions.SetExemplarFilter(this OpenTelemetry.Metrics.MeterProviderBuilder! meterProviderBuilder, OpenTelemetry.Metrics.ExemplarFilter! exemplarFilter) -> OpenTelemetry.Metrics.MeterProviderBuilder!
static OpenTelemetry.Sdk.CreateLoggerProviderBuilder() -> OpenTelemetry.Logs.LoggerProviderBuilder!
~abstract OpenTelemetry.Metrics.ExemplarFilter.ShouldSample(double value, System.ReadOnlySpan<System.Collections.Generic.KeyValuePair<string, object>> tags) -> bool ~abstract OpenTelemetry.Metrics.ExemplarFilter.ShouldSample(double value, System.ReadOnlySpan<System.Collections.Generic.KeyValuePair<string, object>> tags) -> bool
~abstract OpenTelemetry.Metrics.ExemplarFilter.ShouldSample(long value, System.ReadOnlySpan<System.Collections.Generic.KeyValuePair<string, object>> tags) -> bool ~abstract OpenTelemetry.Metrics.ExemplarFilter.ShouldSample(long value, System.ReadOnlySpan<System.Collections.Generic.KeyValuePair<string, object>> tags) -> bool
~OpenTelemetry.Metrics.Exemplar.FilteredTags.get -> System.Collections.Generic.List<System.Collections.Generic.KeyValuePair<string, object>> ~OpenTelemetry.Metrics.Exemplar.FilteredTags.get -> System.Collections.Generic.List<System.Collections.Generic.KeyValuePair<string, object>>

View File

@ -1,3 +1,12 @@
OpenTelemetry.Logs.BatchExportLogRecordProcessorOptions
OpenTelemetry.Logs.BatchExportLogRecordProcessorOptions.BatchExportLogRecordProcessorOptions() -> void
OpenTelemetry.Logs.LoggerProviderBuilderExtensions
OpenTelemetry.Logs.LoggerProviderExtensions
OpenTelemetry.Logs.LogRecord.Logger.get -> OpenTelemetry.Logs.Logger?
OpenTelemetry.Logs.LogRecord.Severity.get -> OpenTelemetry.Logs.LogRecordSeverity?
OpenTelemetry.Logs.LogRecord.Severity.set -> void
OpenTelemetry.Logs.LogRecord.SeverityText.get -> string?
OpenTelemetry.Logs.LogRecord.SeverityText.set -> void
OpenTelemetry.Metrics.AlwaysOffExemplarFilter OpenTelemetry.Metrics.AlwaysOffExemplarFilter
OpenTelemetry.Metrics.AlwaysOffExemplarFilter.AlwaysOffExemplarFilter() -> void OpenTelemetry.Metrics.AlwaysOffExemplarFilter.AlwaysOffExemplarFilter() -> void
OpenTelemetry.Metrics.AlwaysOnExemplarFilter OpenTelemetry.Metrics.AlwaysOnExemplarFilter
@ -13,7 +22,17 @@ OpenTelemetry.Metrics.ExemplarFilter.ExemplarFilter() -> void
OpenTelemetry.Metrics.MetricPoint.GetExemplars() -> OpenTelemetry.Metrics.Exemplar[]! OpenTelemetry.Metrics.MetricPoint.GetExemplars() -> OpenTelemetry.Metrics.Exemplar[]!
OpenTelemetry.Metrics.TraceBasedExemplarFilter OpenTelemetry.Metrics.TraceBasedExemplarFilter
OpenTelemetry.Metrics.TraceBasedExemplarFilter.TraceBasedExemplarFilter() -> void OpenTelemetry.Metrics.TraceBasedExemplarFilter.TraceBasedExemplarFilter() -> void
static OpenTelemetry.Logs.LoggerProviderBuilderExtensions.AddProcessor(this OpenTelemetry.Logs.LoggerProviderBuilder! loggerProviderBuilder, OpenTelemetry.BaseProcessor<OpenTelemetry.Logs.LogRecord!>! processor) -> OpenTelemetry.Logs.LoggerProviderBuilder!
static OpenTelemetry.Logs.LoggerProviderBuilderExtensions.AddProcessor(this OpenTelemetry.Logs.LoggerProviderBuilder! loggerProviderBuilder, System.Func<System.IServiceProvider!, OpenTelemetry.BaseProcessor<OpenTelemetry.Logs.LogRecord!>!>! implementationFactory) -> OpenTelemetry.Logs.LoggerProviderBuilder!
static OpenTelemetry.Logs.LoggerProviderBuilderExtensions.AddProcessor<T>(this OpenTelemetry.Logs.LoggerProviderBuilder! loggerProviderBuilder) -> OpenTelemetry.Logs.LoggerProviderBuilder!
static OpenTelemetry.Logs.LoggerProviderBuilderExtensions.Build(this OpenTelemetry.Logs.LoggerProviderBuilder! loggerProviderBuilder) -> OpenTelemetry.Logs.LoggerProvider!
static OpenTelemetry.Logs.LoggerProviderBuilderExtensions.ConfigureResource(this OpenTelemetry.Logs.LoggerProviderBuilder! loggerProviderBuilder, System.Action<OpenTelemetry.Resources.ResourceBuilder!>! configure) -> OpenTelemetry.Logs.LoggerProviderBuilder!
static OpenTelemetry.Logs.LoggerProviderBuilderExtensions.SetResourceBuilder(this OpenTelemetry.Logs.LoggerProviderBuilder! loggerProviderBuilder, OpenTelemetry.Resources.ResourceBuilder! resourceBuilder) -> OpenTelemetry.Logs.LoggerProviderBuilder!
static OpenTelemetry.Logs.LoggerProviderExtensions.AddProcessor(this OpenTelemetry.Logs.LoggerProvider! provider, OpenTelemetry.BaseProcessor<OpenTelemetry.Logs.LogRecord!>! processor) -> OpenTelemetry.Logs.LoggerProvider!
static OpenTelemetry.Logs.LoggerProviderExtensions.ForceFlush(this OpenTelemetry.Logs.LoggerProvider! provider, int timeoutMilliseconds = -1) -> bool
static OpenTelemetry.Logs.LoggerProviderExtensions.Shutdown(this OpenTelemetry.Logs.LoggerProvider! provider, int timeoutMilliseconds = -1) -> bool
static OpenTelemetry.Metrics.MeterProviderBuilderExtensions.SetExemplarFilter(this OpenTelemetry.Metrics.MeterProviderBuilder! meterProviderBuilder, OpenTelemetry.Metrics.ExemplarFilter! exemplarFilter) -> OpenTelemetry.Metrics.MeterProviderBuilder! static OpenTelemetry.Metrics.MeterProviderBuilderExtensions.SetExemplarFilter(this OpenTelemetry.Metrics.MeterProviderBuilder! meterProviderBuilder, OpenTelemetry.Metrics.ExemplarFilter! exemplarFilter) -> OpenTelemetry.Metrics.MeterProviderBuilder!
static OpenTelemetry.Sdk.CreateLoggerProviderBuilder() -> OpenTelemetry.Logs.LoggerProviderBuilder!
~abstract OpenTelemetry.Metrics.ExemplarFilter.ShouldSample(double value, System.ReadOnlySpan<System.Collections.Generic.KeyValuePair<string, object>> tags) -> bool ~abstract OpenTelemetry.Metrics.ExemplarFilter.ShouldSample(double value, System.ReadOnlySpan<System.Collections.Generic.KeyValuePair<string, object>> tags) -> bool
~abstract OpenTelemetry.Metrics.ExemplarFilter.ShouldSample(long value, System.ReadOnlySpan<System.Collections.Generic.KeyValuePair<string, object>> tags) -> bool ~abstract OpenTelemetry.Metrics.ExemplarFilter.ShouldSample(long value, System.ReadOnlySpan<System.Collections.Generic.KeyValuePair<string, object>> tags) -> bool
~OpenTelemetry.Metrics.Exemplar.FilteredTags.get -> System.Collections.Generic.List<System.Collections.Generic.KeyValuePair<string, object>> ~OpenTelemetry.Metrics.Exemplar.FilteredTags.get -> System.Collections.Generic.List<System.Collections.Generic.KeyValuePair<string, object>>

View File

@ -1,3 +1,12 @@
OpenTelemetry.Logs.BatchExportLogRecordProcessorOptions
OpenTelemetry.Logs.BatchExportLogRecordProcessorOptions.BatchExportLogRecordProcessorOptions() -> void
OpenTelemetry.Logs.LoggerProviderBuilderExtensions
OpenTelemetry.Logs.LoggerProviderExtensions
OpenTelemetry.Logs.LogRecord.Logger.get -> OpenTelemetry.Logs.Logger?
OpenTelemetry.Logs.LogRecord.Severity.get -> OpenTelemetry.Logs.LogRecordSeverity?
OpenTelemetry.Logs.LogRecord.Severity.set -> void
OpenTelemetry.Logs.LogRecord.SeverityText.get -> string?
OpenTelemetry.Logs.LogRecord.SeverityText.set -> void
OpenTelemetry.Metrics.AlwaysOffExemplarFilter OpenTelemetry.Metrics.AlwaysOffExemplarFilter
OpenTelemetry.Metrics.AlwaysOffExemplarFilter.AlwaysOffExemplarFilter() -> void OpenTelemetry.Metrics.AlwaysOffExemplarFilter.AlwaysOffExemplarFilter() -> void
OpenTelemetry.Metrics.AlwaysOnExemplarFilter OpenTelemetry.Metrics.AlwaysOnExemplarFilter
@ -13,7 +22,17 @@ OpenTelemetry.Metrics.ExemplarFilter.ExemplarFilter() -> void
OpenTelemetry.Metrics.MetricPoint.GetExemplars() -> OpenTelemetry.Metrics.Exemplar[]! OpenTelemetry.Metrics.MetricPoint.GetExemplars() -> OpenTelemetry.Metrics.Exemplar[]!
OpenTelemetry.Metrics.TraceBasedExemplarFilter OpenTelemetry.Metrics.TraceBasedExemplarFilter
OpenTelemetry.Metrics.TraceBasedExemplarFilter.TraceBasedExemplarFilter() -> void OpenTelemetry.Metrics.TraceBasedExemplarFilter.TraceBasedExemplarFilter() -> void
static OpenTelemetry.Logs.LoggerProviderBuilderExtensions.AddProcessor(this OpenTelemetry.Logs.LoggerProviderBuilder! loggerProviderBuilder, OpenTelemetry.BaseProcessor<OpenTelemetry.Logs.LogRecord!>! processor) -> OpenTelemetry.Logs.LoggerProviderBuilder!
static OpenTelemetry.Logs.LoggerProviderBuilderExtensions.AddProcessor(this OpenTelemetry.Logs.LoggerProviderBuilder! loggerProviderBuilder, System.Func<System.IServiceProvider!, OpenTelemetry.BaseProcessor<OpenTelemetry.Logs.LogRecord!>!>! implementationFactory) -> OpenTelemetry.Logs.LoggerProviderBuilder!
static OpenTelemetry.Logs.LoggerProviderBuilderExtensions.AddProcessor<T>(this OpenTelemetry.Logs.LoggerProviderBuilder! loggerProviderBuilder) -> OpenTelemetry.Logs.LoggerProviderBuilder!
static OpenTelemetry.Logs.LoggerProviderBuilderExtensions.Build(this OpenTelemetry.Logs.LoggerProviderBuilder! loggerProviderBuilder) -> OpenTelemetry.Logs.LoggerProvider!
static OpenTelemetry.Logs.LoggerProviderBuilderExtensions.ConfigureResource(this OpenTelemetry.Logs.LoggerProviderBuilder! loggerProviderBuilder, System.Action<OpenTelemetry.Resources.ResourceBuilder!>! configure) -> OpenTelemetry.Logs.LoggerProviderBuilder!
static OpenTelemetry.Logs.LoggerProviderBuilderExtensions.SetResourceBuilder(this OpenTelemetry.Logs.LoggerProviderBuilder! loggerProviderBuilder, OpenTelemetry.Resources.ResourceBuilder! resourceBuilder) -> OpenTelemetry.Logs.LoggerProviderBuilder!
static OpenTelemetry.Logs.LoggerProviderExtensions.AddProcessor(this OpenTelemetry.Logs.LoggerProvider! provider, OpenTelemetry.BaseProcessor<OpenTelemetry.Logs.LogRecord!>! processor) -> OpenTelemetry.Logs.LoggerProvider!
static OpenTelemetry.Logs.LoggerProviderExtensions.ForceFlush(this OpenTelemetry.Logs.LoggerProvider! provider, int timeoutMilliseconds = -1) -> bool
static OpenTelemetry.Logs.LoggerProviderExtensions.Shutdown(this OpenTelemetry.Logs.LoggerProvider! provider, int timeoutMilliseconds = -1) -> bool
static OpenTelemetry.Metrics.MeterProviderBuilderExtensions.SetExemplarFilter(this OpenTelemetry.Metrics.MeterProviderBuilder! meterProviderBuilder, OpenTelemetry.Metrics.ExemplarFilter! exemplarFilter) -> OpenTelemetry.Metrics.MeterProviderBuilder! static OpenTelemetry.Metrics.MeterProviderBuilderExtensions.SetExemplarFilter(this OpenTelemetry.Metrics.MeterProviderBuilder! meterProviderBuilder, OpenTelemetry.Metrics.ExemplarFilter! exemplarFilter) -> OpenTelemetry.Metrics.MeterProviderBuilder!
static OpenTelemetry.Sdk.CreateLoggerProviderBuilder() -> OpenTelemetry.Logs.LoggerProviderBuilder!
~abstract OpenTelemetry.Metrics.ExemplarFilter.ShouldSample(double value, System.ReadOnlySpan<System.Collections.Generic.KeyValuePair<string, object>> tags) -> bool ~abstract OpenTelemetry.Metrics.ExemplarFilter.ShouldSample(double value, System.ReadOnlySpan<System.Collections.Generic.KeyValuePair<string, object>> tags) -> bool
~abstract OpenTelemetry.Metrics.ExemplarFilter.ShouldSample(long value, System.ReadOnlySpan<System.Collections.Generic.KeyValuePair<string, object>> tags) -> bool ~abstract OpenTelemetry.Metrics.ExemplarFilter.ShouldSample(long value, System.ReadOnlySpan<System.Collections.Generic.KeyValuePair<string, object>> tags) -> bool
~OpenTelemetry.Metrics.Exemplar.FilteredTags.get -> System.Collections.Generic.List<System.Collections.Generic.KeyValuePair<string, object>> ~OpenTelemetry.Metrics.Exemplar.FilteredTags.get -> System.Collections.Generic.List<System.Collections.Generic.KeyValuePair<string, object>>

View File

@ -17,7 +17,6 @@
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
[assembly: InternalsVisibleTo("OpenTelemetry.Tests" + AssemblyInfo.PublicKey)] [assembly: InternalsVisibleTo("OpenTelemetry.Tests" + AssemblyInfo.PublicKey)]
[assembly: InternalsVisibleTo("OpenTelemetry.Exporter.Console" + AssemblyInfo.PublicKey)]
[assembly: InternalsVisibleTo("OpenTelemetry.Exporter.InMemory" + AssemblyInfo.PublicKey)] [assembly: InternalsVisibleTo("OpenTelemetry.Exporter.InMemory" + AssemblyInfo.PublicKey)]
[assembly: InternalsVisibleTo("OpenTelemetry.Exporter.Prometheus.AspNetCore" + AssemblyInfo.PublicKey)] [assembly: InternalsVisibleTo("OpenTelemetry.Exporter.Prometheus.AspNetCore" + AssemblyInfo.PublicKey)]
[assembly: InternalsVisibleTo("OpenTelemetry.Exporter.Prometheus.AspNetCore.Tests" + AssemblyInfo.PublicKey)] [assembly: InternalsVisibleTo("OpenTelemetry.Exporter.Prometheus.AspNetCore.Tests" + AssemblyInfo.PublicKey)]

View File

@ -6,6 +6,22 @@
for instructions to enable exemplars. for instructions to enable exemplars.
([#4553](https://github.com/open-telemetry/opentelemetry-dotnet/pull/4553)) ([#4553](https://github.com/open-telemetry/opentelemetry-dotnet/pull/4553))
* Added [Logs Bridge
API](https://github.com/open-telemetry/opentelemetry-specification/blob/976432b74c565e8a84af3570e9b82cb95e1d844c/specification/logs/bridge-api.md)
implementation (`Sdk.CreateLoggerProviderBuilder`, etc.).
([#4433](https://github.com/open-telemetry/opentelemetry-dotnet/pull/4433))
* Obsoleted `LogRecord.LogLevel` in favor of the `LogRecord.Severity` property
which matches the [OpenTelemetry Specification > Logs DataModel > Severity
definition](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/logs/data-model.md#field-severitynumber).
([#4433](https://github.com/open-telemetry/opentelemetry-dotnet/pull/4433))
* Added `LogRecord.Logger` property to access the [OpenTelemetry Specification >
Instrumentation
Scope](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/glossary.md#instrumentation-scope)
provided during Logger creation.
([#4433](https://github.com/open-telemetry/opentelemetry-dotnet/pull/4433))
## 1.5.0 ## 1.5.0
Released 2023-Jun-05 Released 2023-Jun-05

View File

@ -27,7 +27,7 @@ namespace OpenTelemetry.Logs;
/// OTEL_BLRP_SCHEDULE_DELAY environment variables are parsed during object /// OTEL_BLRP_SCHEDULE_DELAY environment variables are parsed during object
/// construction. /// construction.
/// </summary> /// </summary>
internal class BatchExportLogRecordProcessorOptions : BatchExportProcessorOptions<LogRecord> public class BatchExportLogRecordProcessorOptions : BatchExportProcessorOptions<LogRecord>
{ {
internal const string MaxQueueSizeEnvVarKey = "OTEL_BLRP_MAX_QUEUE_SIZE"; internal const string MaxQueueSizeEnvVarKey = "OTEL_BLRP_MAX_QUEUE_SIZE";

View File

@ -26,7 +26,7 @@ namespace OpenTelemetry.Logs;
/// <summary> /// <summary>
/// Contains extension methods for the <see cref="LoggerProviderBuilder"/> class. /// Contains extension methods for the <see cref="LoggerProviderBuilder"/> class.
/// </summary> /// </summary>
internal static class LoggerProviderBuilderExtensions public static class LoggerProviderBuilderExtensions
{ {
/// <summary> /// <summary>
/// Sets the <see cref="ResourceBuilder"/> from which the Resource associated with /// Sets the <see cref="ResourceBuilder"/> from which the Resource associated with

View File

@ -157,7 +157,6 @@ internal sealed class OpenTelemetryLogger : ILogger
{ {
iLoggerData.State = null; iLoggerData.State = null;
/* TODO: Enable this if/when LogRecordAttributeList becomes public.
if (typeof(TState) == typeof(LogRecordAttributeList)) if (typeof(TState) == typeof(LogRecordAttributeList))
{ {
// Note: This block is written to be elided by the JIT when // Note: This block is written to be elided by the JIT when
@ -169,8 +168,7 @@ internal sealed class OpenTelemetryLogger : ILogger
return logRecordAttributes.Export(ref logRecord.AttributeStorage); return logRecordAttributes.Export(ref logRecord.AttributeStorage);
} }
else */ else if (state is IReadOnlyList<KeyValuePair<string, object?>> stateList)
if (state is IReadOnlyList<KeyValuePair<string, object?>> stateList)
{ {
return stateList; return stateList;
} }

View File

@ -148,6 +148,9 @@ public sealed class LogRecord
/// <summary> /// <summary>
/// Gets or sets the log category name. /// Gets or sets the log category name.
/// </summary> /// </summary>
/// <remarks>
/// Note: <see cref="CategoryName"/> is only set when emitting logs through <see cref="ILogger"/>.
/// </remarks>
public string? CategoryName public string? CategoryName
{ {
get => this.ILoggerData.CategoryName; get => this.ILoggerData.CategoryName;
@ -157,7 +160,7 @@ public sealed class LogRecord
/// <summary> /// <summary>
/// Gets or sets the log <see cref="Microsoft.Extensions.Logging.LogLevel"/>. /// Gets or sets the log <see cref="Microsoft.Extensions.Logging.LogLevel"/>.
/// </summary> /// </summary>
// todo: [Obsolete("Use Severity instead LogLevel will be removed in a future version.")] [Obsolete("Use Severity instead. LogLevel will be removed in a future version.")]
public LogLevel LogLevel public LogLevel LogLevel
{ {
get get
@ -183,6 +186,9 @@ public sealed class LogRecord
/// <summary> /// <summary>
/// Gets or sets the log <see cref="Microsoft.Extensions.Logging.EventId"/>. /// Gets or sets the log <see cref="Microsoft.Extensions.Logging.EventId"/>.
/// </summary> /// </summary>
/// <remarks>
/// Note: <see cref="EventId"/> is only set when emitting logs through <see cref="ILogger"/>.
/// </remarks>
public EventId EventId public EventId EventId
{ {
get => this.ILoggerData.EventId; get => this.ILoggerData.EventId;
@ -193,10 +199,15 @@ public sealed class LogRecord
/// Gets or sets the log formatted message. /// Gets or sets the log formatted message.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Note: Set if <see /// Notes:
/// cref="OpenTelemetryLoggerOptions.IncludeFormattedMessage"/> is /// <list type="bullet">
/// enabled or <c>{OriginalFormat}</c> attribute (message template) is /// <item><see cref="FormattedMessage"/> is only set when emitting logs
/// not found. /// through <see cref="ILogger"/>.</item>
/// <item>Set if <see
/// cref="OpenTelemetryLoggerOptions.IncludeFormattedMessage"/> is enabled
/// or <c>{OriginalFormat}</c> attribute (message template) is not
/// found.</item>
/// </list>
/// </remarks> /// </remarks>
public string? FormattedMessage public string? FormattedMessage
{ {
@ -221,8 +232,13 @@ public sealed class LogRecord
/// Gets or sets the raw state attached to the log. /// Gets or sets the raw state attached to the log.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Note: Set to <see langword="null"/> when <see /// Notes:
/// cref="OpenTelemetryLoggerOptions.ParseStateValues"/> is enabled. /// <list type="bullet">
/// <item><see cref="State"/> is only set when emitting logs
/// through <see cref="ILogger"/>.</item>
/// <item>Set to <see langword="null"/> when <see
/// cref="OpenTelemetryLoggerOptions.ParseStateValues"/> is enabled.</item>
/// </list>
/// </remarks> /// </remarks>
[Obsolete("State cannot be accessed safely outside of an ILogger.Log call stack. Use Attributes instead to safely access the data attached to a LogRecord. State will be removed in a future version.")] [Obsolete("State cannot be accessed safely outside of an ILogger.Log call stack. Use Attributes instead to safely access the data attached to a LogRecord. State will be removed in a future version.")]
public object? State public object? State
@ -235,7 +251,7 @@ public sealed class LogRecord
/// Gets or sets the state values attached to the log. /// Gets or sets the state values attached to the log.
/// </summary> /// </summary>
/// <remarks><inheritdoc cref="Attributes" /></remarks> /// <remarks><inheritdoc cref="Attributes" /></remarks>
[Obsolete("Use Attributes instead StateValues will be removed in a future version.")] [Obsolete("Use Attributes instead. StateValues will be removed in a future version.")]
public IReadOnlyList<KeyValuePair<string, object?>>? StateValues public IReadOnlyList<KeyValuePair<string, object?>>? StateValues
{ {
get => this.Attributes; get => this.Attributes;
@ -259,6 +275,9 @@ public sealed class LogRecord
/// <summary> /// <summary>
/// Gets or sets the log <see cref="System.Exception"/>. /// Gets or sets the log <see cref="System.Exception"/>.
/// </summary> /// </summary>
/// <remarks>
/// Note: <see cref="Exception"/> is only set when emitting logs through <see cref="ILogger"/>.
/// </remarks>
public Exception? Exception public Exception? Exception
{ {
get => this.ILoggerData.Exception; get => this.ILoggerData.Exception;
@ -269,7 +288,7 @@ public sealed class LogRecord
/// Gets or sets the original string representation of the severity as it is /// Gets or sets the original string representation of the severity as it is
/// known at the source. /// known at the source.
/// </summary> /// </summary>
internal string? SeverityText public string? SeverityText
{ {
get => this.Data.SeverityText; get => this.Data.SeverityText;
set => this.Data.SeverityText = value; set => this.Data.SeverityText = value;
@ -278,16 +297,16 @@ public sealed class LogRecord
/// <summary> /// <summary>
/// Gets or sets the log <see cref="LogRecordSeverity"/>. /// Gets or sets the log <see cref="LogRecordSeverity"/>.
/// </summary> /// </summary>
internal LogRecordSeverity? Severity public LogRecordSeverity? Severity
{ {
get => this.Data.Severity; get => this.Data.Severity;
set => this.Data.Severity = value; set => this.Data.Severity = value;
} }
/// <summary> /// <summary>
/// Gets or sets the <see cref="Logs.Logger"/> which emitted the <see cref="LogRecord"/>. /// Gets the <see cref="Logs.Logger"/> which emitted the <see cref="LogRecord"/>.
/// </summary> /// </summary>
internal Logger? Logger { get; /*todo: internal*/ set; } public Logger? Logger { get; internal set; }
/// <summary> /// <summary>
/// Executes callback for each currently active scope objects in order /// Executes callback for each currently active scope objects in order

View File

@ -23,7 +23,7 @@ namespace OpenTelemetry.Logs;
/// <summary> /// <summary>
/// Contains extension methods for the <see cref="LoggerProvider"/> class. /// Contains extension methods for the <see cref="LoggerProvider"/> class.
/// </summary> /// </summary>
internal static class LoggerProviderExtensions public static class LoggerProviderExtensions
{ {
/// <summary> /// <summary>
/// Add a processor to the <see cref="LoggerProvider"/>. /// Add a processor to the <see cref="LoggerProvider"/>.

View File

@ -59,6 +59,20 @@ namespace OpenTelemetry
Propagators.DefaultTextMapPropagator = textMapPropagator; Propagators.DefaultTextMapPropagator = textMapPropagator;
} }
/// <summary>
/// Creates a <see cref="LoggerProviderBuilder"/> which is used to build
/// a <see cref="LoggerProvider"/>. In a typical application, a single
/// <see cref="LoggerProvider"/> is created at application startup and
/// disposed at application shutdown. It is important to ensure that the
/// provider is not disposed too early.
/// </summary>
/// <returns><see cref="LoggerProviderBuilder"/> instance, which is used
/// to build a <see cref="LoggerProvider"/>.</returns>
public static LoggerProviderBuilder CreateLoggerProviderBuilder()
{
return new LoggerProviderBuilderBase();
}
/// <summary> /// <summary>
/// Creates a <see cref="MeterProviderBuilder"/> which is used to build /// Creates a <see cref="MeterProviderBuilder"/> which is used to build
/// a <see cref="MeterProvider"/>. In a typical application, a single /// a <see cref="MeterProvider"/>. In a typical application, a single
@ -84,19 +98,5 @@ namespace OpenTelemetry
{ {
return new TracerProviderBuilderBase(); return new TracerProviderBuilderBase();
} }
/// <summary>
/// Creates a <see cref="LoggerProviderBuilder"/> which is used to build
/// a <see cref="LoggerProvider"/>. In a typical application, a single
/// <see cref="LoggerProvider"/> is created at application startup and
/// disposed at application shutdown. It is important to ensure that the
/// provider is not disposed too early.
/// </summary>
/// <returns><see cref="LoggerProviderBuilder"/> instance, which is used
/// to build a <see cref="LoggerProvider"/>.</returns>
internal static LoggerProviderBuilder CreateLoggerProviderBuilder()
{
return new LoggerProviderBuilderBase();
}
} }
} }

View File

@ -382,7 +382,10 @@ namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests
var otlpLogRecord = logRecord.ToOtlpLog(DefaultSdkLimitOptions); var otlpLogRecord = logRecord.ToOtlpLog(DefaultSdkLimitOptions);
Assert.NotNull(otlpLogRecord); Assert.NotNull(otlpLogRecord);
#pragma warning disable CS0618 // Type or member is obsolete
Assert.Equal(logRecord.LogLevel.ToString(), otlpLogRecord.SeverityText); Assert.Equal(logRecord.LogLevel.ToString(), otlpLogRecord.SeverityText);
#pragma warning restore CS0618 // Type or member is obsolete
Assert.Equal((int)logRecord.Severity, (int)otlpLogRecord.SeverityNumber);
switch (logLevel) switch (logLevel)
{ {
case LogLevel.Trace: case LogLevel.Trace: