Azure / azure-functions-dotnet-worker

Azure Functions out-of-process .NET language worker
MIT License
431 stars 184 forks source link

CustomDimensions from BeginScope missing when using ILogger #2870

Open jamesmundy opened 1 day ago

jamesmundy commented 1 day ago

I am wanting to log some custom properties to my ILogger logs (Application Insights Traces) 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"}

liliankasem commented 1 day ago

@jviau is this something you're familiar with?

jviau commented 1 day ago

@jamesmundy is this for dotnet isolated? The category of Host.Function.Console looks like an in-proc category.

In dotnet isolated we do not own the logging SDK. Any issues with log categories not being present when using app insights SDK should be asked to that team: https://github.com/microsoft/ApplicationInsights-dotnet