Skip to content

Unable to log errors during startup or dependency injection (DI) of function dependencies #10474

Closed
@nlykkei

Description

@nlykkei

What problem would the feature you're requesting solve? Please describe.

The Azure Function host doesn't catch and display errors during startup or dependency injection of function dependencies. Instead a generic error is shown (see below).

If I try to catch and log errors myself, then I can't assume Application Insights to be configured, so I would need to log to the console. But if I do that, then nothing is logged, not even if I inspect the filesystem logs, where nothing is ever written.

Could you please describe how to catch and log startup and dependency injection errors, so I can inspect them, including stack traces?

The Azure Function host won't let me log information in Program.cs, when creating and running a HostBuilder in Azure.

Describe the solution you'd like

I would like to be provided with a stack trace of the exception and/or being able to catch and log such errors myself to the console.

Describe alternatives you've considered

I don't think I have any alternatives

Additional context

Azure Functions host: 4.x
Language: .NET 8 (dotnet-isolated)
Service plan: Linux / Consumption plan

Azure Function App Test/Run Error:

image

Program.cs:

var loggerFactory = LoggerFactory.Create(builder => builder.AddConsole());
var logger = loggerFactory.CreateLogger("Startup");

logger.LogInformation("The application is starting...");

var host = new HostBuilder()
    .ConfigureFunctionsWebApplication()
    .ConfigureAppConfiguration(builder =>
    {
        var environment = Environment.GetEnvironmentVariable("ENVIRONMENT") ?? "development";

        builder.SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
            .AddJsonFile($"appsettings.{environment}.json", optional: true, reloadOnChange: true)
            .AddEnvironmentVariables();
    })
    .ConfigureServices((context, services) =>
    {
        services.AddApplicationInsightsTelemetryWorkerService();
        services.ConfigureFunctionsApplicationInsights();
        services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());
        
        services.AddDbContext<AssetOwnershipContext>((sp, options) =>
        {
            var logger = sp.GetRequiredService<ILogger>();
            var connectionString = context.Configuration.GetConnectionString("SqlServer") ?? throw new ConfigurationErrorsException("Connection string not found");
            logger.LogInformation("Using connection string: {connectionString}", connectionString);
            options.UseSqlServer(connectionString);
        });

        services.AddScoped<IApplicationService, ApplicationService>();
        services.AddScoped<IEmailDispatcher, EmailDispatcher>();
        services.AddTransient<IAssetOwnershipRepository, AssetOwnershipRepository>();
        services.AddSingleton<GraphServiceClient>(sp =>
            new GraphServiceClient(
                new DefaultAzureCredential(new DefaultAzureCredentialOptions()
                {
                    ExcludeSharedTokenCacheCredential = true
                })
            )
        );
    })
    .Build();

host.Run();

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions