microsoft / ApplicationInsights-dotnet

ApplicationInsights-dotnet
MIT License
564 stars 287 forks source link

CustomDimensions from BeginScope missing when using ILogger #2918

Open jamesmundy opened 6 days ago

jamesmundy commented 6 days ago

I've been referred to post my issue here: https://github.com/Azure/azure-functions-dotnet-worker/issues/2870

I am wanting to log some custom properties to my ILogger logs (Application Insights Traces) in Azure Functions Isolated however whatever I add is never present in the Application Insights logs and no customDimensions are saved.

My Program.cs:

.ConfigureServices((hostContext, services) =>
{
    services.AddApplicationInsightsTelemetryWorkerService();
    services.ConfigureFunctionsApplicationInsights();
    services.AddLogging((ILoggingBuilder builder) =>
    {
        builder.AddSimpleConsole(x => x.IncludeScopes = true);
        builder.AddFilter("Microsoft.EntityFrameworkCore", LogLevel.None);

        // Disable Informational logs from Azure SDK. These get wired up automatically when using AddAzureClients()
        // Docs -- https://learn.microsoft.com/en-us/dotnet/azure/sdk/logging#logging-with-client-registration
        builder.AddFilter("Azure.Core", LogLevel.Warning);
    });

The packages I'm using

    <PackageReference Include="Microsoft.ApplicationInsights.WorkerService" Version="2.22.0" />
    <PackageReference Include="Microsoft.Azure.Functions.Worker.ApplicationInsights" Version="1.4.0" />

My code using BeginScope to record the variables:

public static class LoggerExtensions
{
    public static void LogCustomTrace(this ILogger logger,
        string method,
        string message,
        TraceType traceType,
        LogLevel logLevel = LogLevel.Information,
        Exception? exception = null)
    {
        using (logger.BeginScope(new Dictionary<string, object>
        { { "TraceType", traceType } }))
        {
            if (exception != null)
            {
                logger.Log(logLevel, exception, $"[{method}]: {message}");
            }
            else
            {
                logger.Log(logLevel, $"[{method}]: {message}");
            }
        }
    }
}

Investigative information

Please provide the following:

Repro steps

Use the code above

Expected behavior

the variable "traceType" should be present in the customDimensions.

Actual behavior

The customDimensions are like this: {"ProcessId":"4224","HostInstanceId":"51952c6f-638d-4f8f-a4c3-b59d06b6b4c4","prop__{OriginalFormat}":"[ManageMachineNumbersAsync]: Running: 1 Creating: 0 Required: 1","LogLevel":"Information","Category":"Host.Function.Console"}