I have a Blazor Hybrid application, where I’m attempting to use OpenTelemetry + NLog to log client information to a file on disk. I’m trying to get the ActivitySource
entries to log to my log file, and console, so I can see the timespan and other information. I need some help getting everything configured correctly (and reducing the what information is being logged… (see info below).
Below is my setup:
Basic Info
Using .NET8
, with a Blazor Hybrid project. There is no appsettings.json
entries for open telemetry. NLog logging to the file is working as desired. OT is logging to the console… but it’s not useful information to me (currently) and the app is very slow when enabled:
LogRecord.Timestamp: 2024-05-13T14:21:06.2594275Z
LogRecord.CategoryName: Microsoft.AspNetCore.Components.RenderTree.Renderer
LogRecord.Severity: Debug
LogRecord.SeverityText: Debug
LogRecord.Body: Rendering component {ComponentId} of type {ComponentType}
LogRecord.Attributes (Key:Value):
ComponentId: 82
ComponentType: MudBlazor.MudOverlay
OriginalFormat (a.k.a Body): Rendering component {ComponentId} of type {ComponentType}
LogRecord.EventId: 3
LogRecord.EventName: RenderingComponent
Resource associated with LogRecord:
service.name: <APP NAME>
service.instance.id: 32a40416-826e-444a-a138-485d89f3ed32
telemetry.sdk.name: opentelemetry
telemetry.sdk.language: dotnet
telemetry.sdk.version: 1.8.1
LogRecord.Timestamp: 2024-05-13T14:21:06.2778115Z
LogRecord.CategoryName: Microsoft.AspNetCore.Components.RenderTree.Renderer
LogRecord.Severity: Debug
LogRecord.SeverityText: Debug
LogRecord.Body: Rendering component {ComponentId} of type {ComponentType}
LogRecord.Attributes (Key:Value):
ComponentId: 83
ComponentType: MudBlazor.MudElement
OriginalFormat (a.k.a Body): Rendering component {ComponentId} of type {ComponentType}
LogRecord.EventId: 3
LogRecord.EventName: RenderingComponent
The ActivitySource
is being created in a helper class that also implements IDisposable
and is doing all the necessary disposal, etc. If the class is needed, I will edit to show, but the activity is created like so:
public Telemetry([CallerMemberName] string methodName = "")
{
_MethodName = methodName;
_Activity = TelemetryConstants.ActivitySource.StartActivity(_MethodName);
AddTag("operation.datetimeoffset.utcnow.begin", DateTimeOffset.UtcNow.ToString(_DateFormat));
}
MauiProgram.cs
var builder = MauiApp.CreateBuilder();
...
builder.Services.AddOpenTelemetry()
.ConfigureResource(resource =>
resource.AddService(serviceName: TelemetryConstants.ServiceName, serviceVersion: TelemetryConstants.ServiceVersion)
)
.WithTracing(tracing =>
{
tracing
.AddSource(TelemetryConstants.ServiceName)
.AddConsoleExporter(options =>
{
options.Targets = OpenTelemetry.Exporter.ConsoleExporterOutputTargets.Debug;
});
})
.WithMetrics(builder =>
{
builder.AddConsoleExporter(options =>
{
options.Targets = OpenTelemetry.Exporter.ConsoleExporterOutputTargets.Debug;
});
})
;
builder.Logging.ClearProviders();
builder.Logging.SetMinimumLevel(LogLevel.Trace);
builder.Logging.AddNLog();
builder.Logging.AddOpenTelemetry(options =>
{
options
.SetResourceBuilder(ResourceBuilder.CreateDefault().AddService(TelemetryConstants.ServiceName))
.AddConsoleExporter(options =>
{
options.Targets = OpenTelemetry.Exporter.ConsoleExporterOutputTargets.Debug;
});
});
CSProj Package References
<ItemGroup>
<PackageReference Include="Microsoft.Maui.Controls" Version="8.0.21" />
<PackageReference Include="Microsoft.Maui.Controls.Compatibility" Version="8.0.21" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebView.Maui" Version="8.0.21" />
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="8.0.0" />
<PackageReference Include="MudBlazor" Version="6.19.1" />
<PackageReference Include="NLog" Version="5.3.2" />
<PackageReference Include="NLog.Extensions.Logging" Version="5.3.11" />
<PackageReference Include="NLog.Targets.MauiLog" Version="8.0.0" />
<PackageReference Include="OpenTelemetry" Version="1.8.1" />
<PackageReference Include="OpenTelemetry.Api" Version="1.8.1" />
<PackageReference Include="OpenTelemetry.Exporter.Console" Version="1.8.1" />
<PackageReference Include="OpenTelemetry.Extensions.Hosting" Version="1.8.1" />
</ItemGroup>