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?