asp.net core - Application insights telemetry initializer not called - Stack Overflow

admin2025-04-25  4

Custom telemetry initializer derived from TelemetryInitializerBase does not receive log messages written from within SignalR hub.

It does receive them if ILogger.LogInformation is called from a web controller.

Hub:

public class TestHub : Hub<ITestHubClients> {
    
    private readonly ILogger logger;
    
    public TestHub(ILogger<TestHub> logger)
    {
        this.logger = logger;
    }

    public Task Method1()
    {
        logger.LogInformation("Method1 received");

        return Task.CompletedTask;
    }
}

Additional details:

Service registration:

services.AddApplicationInsightsTelemetry();
services.AddSingleton<ITelemetryInitializer, DerivedTelemetryInitializer>();

Telemetry initializer:

private class DerivedTelemetryInitializer : TelemetryInitializerBase
{
    public DerivedTelemetryInitializer(IHttpContextAccessor httpContextAccessor)
        : base(httpContextAccessor)
    {
    }

    // Does NOT receive logs written from signalr hub
    protected override void OnInitializeTelemetry(HttpContext platformContext, RequestTelemetry requestTelemetry, ITelemetry telemetry)
    {
    }
}

Also found out that implementing ITelemetryInitializer instead of deriving from TelemetryInitializerBase does not produce this issue.

private class ImplementedTelemetryInitializer : ITelemetryInitializer
{
    // Does receive logs written from signalr hub
    public void Initialize(ITelemetry telemetry)
    {           
    }
}

I suspect the reason is TelemetryInitializerBase's failure to find HttpContext even though it is available at HubCallerContext.GetHttpContext().

Is there a way to help TelemetryInitializerBase detect hub http context which is quite useful for including user data in each telemetry?

转载请注明原文地址:http://anycun.com/QandA/1745535738a90902.html